在没有 ResetEvent 的情况下调用 setEvent

2024-04-13

如果使用 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 的 case 正在执行时(即它仍然被设置),hEvent1 再次被触发。我故意不放置 ResetEvent(hEvent1),即使它是手动重置事件。那么,我们有竞争条件吗?


事件就像布尔标志 - 可以为其指定两次 true 。没有人可能会等待当前已发出信号的事件,因此当您将其再次设置为发出信号时,不会发生任何事情。

我不确定“事件正在处理”是什么意思。看来您使用了“事件”一词两次,具有两种不同的含义 - 由 a 表示的内核对象HANDLE,以及“我的程序必须做的事情”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在没有 ResetEvent 的情况下调用 setEvent 的相关文章

随机推荐