2011-01-13 30 views
1

スレッドを終了するよう通知するイベント(::CreateEvent(...)で作成)を使用する場合は、スレッドを終了するか、イベントハンドル(::CloseHandle(...))を閉じる前にそのイベント(::ResetEvent(...))をリセットする必要がありますか?または、スレッドが再起動される可能性がある場合、それは良い習慣ですか?これはWindows環境用です。ありがとう。スレッド終了イベント - C++

+0

もっと具体的にしてください。私。いくつかのコードが役に立ちます。私が知っている唯一の良い習慣は、あなたが提供した情報を与えられていることです。::イベントがもはや必要でなくなるとすぐにイベントハンドラでCloseHandleが呼び出され、後でイベントを使用しようとしないようにしてください – ds27680

答えて

2

使用するイベントのセマンティクスによって異なります。

イベントを使用して複数のスレッドを終了させる場合は、各スレッドでイベントをリセットしないでください。 1つのスレッドだけをトリガーするためにそれを使用すると、それはさらにセマンティクスに依存します。イベントが他のスレッドに他のものを通知するために使用される場合は、ダイスレッドでイベントをリセットする必要があります。それ以外の場合、イベントが単一のスレッドが死ぬことを通知するためにのみ使用され、それ以外の場合はイベントをリセットできます。このイベントが通知された結果、目を覚ますことはありません。

リソースリークを防ぐためにイベントをリセットする必要はありません。あなたがする必要があるのはCloseHandle()

3

リセットイベントを呼び出す必要はありません。ハンドルを閉じると、それに関連付けられたイベントはもはや有効にならないためです。

0

です。ハンドルを閉じる前に、イベントの設定状態を反転する必要はありません。 さらに説明すると、イベントの設定状態は、その存在とは無関係です。あなたが気付いているように、CreateEvent(...)関数はイベントの初期状態を設定することを可能にします。だからあなたがそれを設定して初期化すれば、それはCloseHandle()の前にセットされているはずですか?もちろん、設定された状態はまったく重要ではありません。クラスのメンバーを破棄する前に、クラスのメンバーを開始状態にリセットすることに似ています。

関連する問題