WaitForMultipleObjects()是否重置所有自动重置事件? [英] Does WaitForMultipleObjects() reset all auto-reset events?

查看:120
本文介绍了WaitForMultipleObjects()是否重置所有自动重置事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个事件循环,正在等待几个自动重置事件。
事件都被初始化为数组 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:
//处理事件...
}
}
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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆