WaitForMultipleObjects()是否重置所有自动重置事件? [英] Does WaitForMultipleObjects() reset all auto-reset events?
问题描述
我有一个事件循环,正在等待几个自动重置事件。
事件都被初始化为数组 eventHandles _
与 CreateEvent(NULL,false,false,NULL)
。
while(true)
{
DWORD waitResult = WaitForMultipleObjects(3,eventHandles_,false,INFINITE) ;
switch(waitResult)
{
case WAIT_OBJECT_0 + 0:
// handle event ...
case WAIT_OBJECT_0 + 1:
// handle event ...
case WAIT_OBJECT_0 + 2:
//处理事件...
}
}
$ c $我的问题:如果事件1和2同时发生,循环将处理 WAIT_OBJECT_0 + 1
解决方案...修改仅针对发信号状态引起功能的对象或对象返回...
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v = vs85).aspx
从一个 Raymond Chen :
如果等待一个事件,那么只有该事件被修改。如果等待
的所有事件,那么所有的都被修改。这就是文档
的意思是对象或对象。如果等待任意,如果
等待全部,则为奇数。
I've got an event loop that's waiting on several auto-reset events.
The events were all initialized into array eventHandles_
with CreateEvent(NULL, false, false, NULL)
.
while (true)
{
DWORD waitResult = WaitForMultipleObjects(3, eventHandles_, false, INFINITE);
switch (waitResult)
{
case WAIT_OBJECT_0 + 0:
//handle event...
case WAIT_OBJECT_0 + 1:
//handle event...
case WAIT_OBJECT_0 + 2:
//handle event...
}
}
My question: if event 1 and 2 occur simultaneously, the loop will process WAIT_OBJECT_0 + 1
because it's first. But will event 2 remain signaled when the loop comes around again? Or does it get reset automatically?
解决方案 "...modification occurs only for the object or objects whose signaled state caused the function to return..."
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx
And from the mouth of one Raymond Chen:
If waiting for one event, then only that event is modified. If waiting
for all events, then all are modified. That's what the documentation
means by "object or objects". Singular if wait-any, plural if
wait-all.
这篇关于WaitForMultipleObjects()是否重置所有自动重置事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!