如果使用 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(使用前将#替换为@)