• ベストアンサー

VC++ Workerスレッドを強制終了させる方法

VC++6.0でwinアプリを作っています。 ダイアログベースで、ボタンを押すとワーカースレッドを実行し、ここでデータ処理をしています。 もし、スレッド中でデータ処理時間がかかってしまうと、これをスレッド外で強制的に終了させたいですが、出来るのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

>これをスレッド外で強制的に終了させたい とういうことですが、もしこれを行うと、強制終了させられたスレッドは正規の終了手続きを踏まずに終了します。 そのため、確保したリソースの解放漏れ等が発生しますので、できたらしない方が良いと考えます。 最も簡単な方法は、(ワーカスレッドの作り方にも依存しますが)、フラグによる制御です。 ボタンが押された時、メインスレッドがフラグをオンします。(最初はオフ) ワーカスレッドは一定間隔(ループしているならループの途中で)で、フラグがオンかどうかをチェックし、オンの場合は自らすみやかに終了するようにします。

jaekuk
質問者

お礼

ご回答有難うございます。 前後の状況を見ましたら、tatsu99さんのおっしゃった通り、確保したメモリが正しく解放されない問題が発生することが分かりました。 教えて頂いたように、フラグで制御しようと思います。 有難うございました。

その他の回答 (2)

noname#9119
noname#9119
回答No.2

スレッドを「強制的に」終了させるには TerminateThread 関数を使う。 「強制的に」終了させるのでヘルプにも「危険な関数」などと書かれていたりするけれども、 問いは「強制的に終了させたい」だから、これでいいよね?

回答No.1

できます。 問いは「できるのでしょうか」だから、これでいいよね?

jaekuk
質問者

補足

ご回答有難うございます。 出来るならば、方法を教えていただけませんか。 可能でしたらソースコードもお願いします。

関連するQ&A