私のプロジェクトの1つで、複数auto reset events
のスレッドと2つのスレッドを作成しました。スレッドは、次のWaitForMultipleObjects
ように、実行を続行する前にいくつかのイベントを待機するために使用します。
HANDLE hTerminateEvent = CreateEvent(...); // auto reset
HANDLE hStateChangedEvent = CreateEvent(...); // auto reset
void thread1Func()
{
HANDLE handles[2] = { hTerminateEvent, hStateChangedEvent };
WaitForMultipleObjects(2, handles, FALSE/*bWaitAll*/, INFINITE);
...
}
void thread2Func()
{
HANDLE handles[2] = { hTerminateEvent, hStateChangedEvent };
WaitForMultipleObjects(2, handles, FALSE/*bWaitAll*/, INFINITE);
...
}
以前、シングルになると両方のスレッドがウェイクアップすると思っていhTerminateEvent
ましたが、自動リセットイベントには当てはまらないようです。自動リセットイベントはランダムにウェイクアップされ、ウェイクアップするとhTerminateEvent
シグナルなしにリセットされます。
私の質問はこれを解決する方法です:手動リセットイベントを使用して?または、この問題を解決するための設計はありますか?ありがとう!