- ベストアンサー
VC++ Workerスレッドを強制終了させる方法
VC++6.0でwinアプリを作っています。 ダイアログベースで、ボタンを押すとワーカースレッドを実行し、ここでデータ処理をしています。 もし、スレッド中でデータ処理時間がかかってしまうと、これをスレッド外で強制的に終了させたいですが、出来るのでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>これをスレッド外で強制的に終了させたい とういうことですが、もしこれを行うと、強制終了させられたスレッドは正規の終了手続きを踏まずに終了します。 そのため、確保したリソースの解放漏れ等が発生しますので、できたらしない方が良いと考えます。 最も簡単な方法は、(ワーカスレッドの作り方にも依存しますが)、フラグによる制御です。 ボタンが押された時、メインスレッドがフラグをオンします。(最初はオフ) ワーカスレッドは一定間隔(ループしているならループの途中で)で、フラグがオンかどうかをチェックし、オンの場合は自らすみやかに終了するようにします。
その他の回答 (2)
noname#9119
回答No.2
スレッドを「強制的に」終了させるには TerminateThread 関数を使う。 「強制的に」終了させるのでヘルプにも「危険な関数」などと書かれていたりするけれども、 問いは「強制的に終了させたい」だから、これでいいよね?
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
回答No.1
できます。 問いは「できるのでしょうか」だから、これでいいよね?
質問者
補足
ご回答有難うございます。 出来るならば、方法を教えていただけませんか。 可能でしたらソースコードもお願いします。
お礼
ご回答有難うございます。 前後の状況を見ましたら、tatsu99さんのおっしゃった通り、確保したメモリが正しく解放されない問題が発生することが分かりました。 教えて頂いたように、フラグで制御しようと思います。 有難うございました。