2

手動リセット イベントが setEvent を使用して設定されているが、ResetEvent を使用してリセットされていない場合はどうなりますか。そのイベントは複数回トリガーされます。つまり、イベントが処理されている間、再びイベントが設定されます。

サンプル タスクは次のとおりです。

void foo()
{
...
   SetEvent(hEvent1);
...
}
void foo1()
{
...
SetEvent(hEvent2);
...
}
int MainHandler()
{
...
 dwEvent = WaitForMultipleObjects(2,
 ghEvents,     // array of objects
 FALSE,       // wait for any object
 5000); 
switch(dwEvent)
{
case hEvent1:
//do something
break;
case hEvent2:
//do something
break;
}
}

ここで、hEvent1 のケースが実行中 (つまり、まだ設定されている) に、何らかの形で再び hEvent1 がトリガーされたとします。手動リセット イベントですが、意図的に ResetEvent(hEvent1) を配置していません。では、競合状態はありますか?

4

2 に答える 2

2

イベントはブール フラグのようなものです。true を 2 回割り当てても問題ありません。現在シグナル状態になっているイベントを待っている人はいない可能性があるため、再度シグナル状態に設定しても何も起こりません。

「イベントが処理されています」の意味がわかりません。「イベント」という言葉を 2 つの異なる意味で 2 回使用しているようですHANDLE

于 2014-01-08T00:58:09.803 に答える