WaitForMultipleObjects()是否重置所有自动重置事件?

时间:2012-03-19 19:00:11

标签: windows multithreading winapi events asynchronous

我有一个等待几个自动重置事件的事件循环。 这些事件都已使用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:
        //handle event...
    }
}

我的问题:如果事件1和2同时发生,循环将处理WAIT_OBJECT_0 + 1因为它是第一个。但是当循环再次出现时,事件2是否仍会发出信号?还是会自动重置?

1 个答案:

答案 0 :(得分:5)

“...仅对信号状态导致函数返回的对象或对象发生修改...”

http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx

从一个Raymond Chen的口中发出:

  

如果等待一个事件,则仅修改该事件。如果等待   对于所有事件,然后所有事件都被修改。这就是文档   意思是“对象或对象”。单数如果等待任何,复数如果   等待-所有