- ベストアンサー
スレッドの終了の仕方
こんばんわ 今スレッドを使ったプログラムを組んでいるのですが、_beginthreadexで起動したスレッド(無限ループ)二つをある条件の時にmainで終了させたいのですが、_endthreadでは特定のスレッドを終了させるようなパラメータが無いみたいなのでどうしていいかわかりません。CloseHandleだけでも終了させることができるのでしょうか??何かいい方法は無いでしょうか? windowsプログラム初心者なので分かりにくい質問で申し訳ないです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
スレッドは自分自身で能動的に終了すべきです。 他のスレッド(ご質問のケースではプライマリスレッド)から「殺す」べきではないのです。 なぜかというと、スレッドが死ぬときに、スレッド自身が自分自身の中で確保した資源(たとえばメモリ領域とか、他のプロセスや他のスレッドとの排他制御を目的としたセマフォなど)を開放しなきゃいけないことを知っているのは、ほかならぬそのスレッドですから。 ということで、Tipをアドバイスしますね。 ・プライマリスレッドが死んで欲しいスレッドに対して、「死んで欲しいんだけど」とお知らせします。単純な例では、グローバル変数に「死んで欲しい」フラグを定義し、死んで欲しくなったらフラグをONにします。 ・死ぬほうのスレッドは、あるタイミングで(あると言っているのは、あなたの設計に依存するという意味です。)、「死んで欲しい」を検出できるようにしておいて、検出したら自ら必要とされる後始末をおこなって、綺麗に死んでいきます。このとき、ご質問の例では、_endthread()を呼び出します。 お解りいただけたでしょうか? 参考まで。
お礼
アドバイスありがとうございます。フラグを立ててスレッド自身で、_endthreadexを呼び出してみます。