2011-07-15 18 views
1

これは私のコードでやっていることです: 私はイベントを作成し、スレッドを作成します。メインスレッドで何かが失敗した場合は、関連するスレッドに失敗を示すイベントを設定し、関連するスレッドを正常に終了するように指示します。関連スレッドを終了する前にスレッドハンドルを閉じる

私の質問は、イベントが設定された直後に、関連するスレッドがまだ実行中(クリーンアップと終了を試みている間)に、スレッドハンドルを閉じるのは安全ですか?直ちにスレッ​​ドハンドルをクローズし、関連するスレッドが戻るのを待つことを意図していないのは、関連するスレッドが戻るまでメインスレッドで待機している他のスレッドをストールさせないためです。

喜んでお勧めします。ありがとう。

答えて

3

はい、安全です。 CreateThread documentationから:スレッドが終了しており、それへのすべてのハンドルがCloseHandleへの呼び出しによって閉鎖されているまで

スレッドオブジェクトは、システム内に残っています。

もちろん、スレッドのハンドルを閉じると、もはやWaitForSingleObject/WaitForMultipleObjectsの呼び出しで待機することはできません。

+0

ありがとうございました。私は関連するスレッドが(問題が発生しない限り)戻るのを待ってはいけません。したがって、スレッドが作成されて実行されると、ハンドルは必要ありません。私は、それが間違っている場合に備えて、関連するスレッドをきれいにして正常に終了するように世話をしています。したがって、ハンドルを閉じ、関連するスレッドがまだ実行されている間にメインスレッドを終了することが安全である/法的でなければならないと仮定しています。 – MemoryLeak

0

スレッド関数内であってもスレッドハンドルを閉じるのは罪ではありませんが、そのスレッドハンドルを通信に使用することはできません。他のオプションはイベントを通知するどこにでもあります。waitforsingleobjectを使用し、スレッドハンドルを待ちます。戻ったらハンドルを閉じることができます。

関連する問題