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

Windows WaitForMultipleObjects()是否重置所有自动重置事件?,windows,multithreading,winapi,events,asynchronous,Windows,Multithreading,Winapi,Events,Asynchronous,我有一个事件循环,它正在等待几个自动重置事件。 所有事件都被初始化为数组eventHandles\uuu,使用CreateEvent(NULL,false,false,NULL) 我的问题:如果事件1和2同时发生,循环将处理WAIT\u OBJECT\u 0+1,因为它是第一个。但是,当循环再次出现时,事件2会保持信号状态吗?还是会自动重置?“…仅对其信号状态导致函数返回的一个或多个对象进行修改…” 从一个人的口中: 如果等待一个事件,则仅修改该事件。如果等待 对于所有事件,则修改所有事件。这

我有一个事件循环,它正在等待几个自动重置事件。 所有事件都被初始化为数组
eventHandles\uuu
,使用
CreateEvent(NULL,false,false,NULL)

我的问题:如果事件1和2同时发生,循环将处理
WAIT\u OBJECT\u 0+1
,因为它是第一个。但是,当循环再次出现时,事件2会保持信号状态吗?还是会自动重置?

“…仅对其信号状态导致函数返回的一个或多个对象进行修改…”

从一个人的口中:

如果等待一个事件,则仅修改该事件。如果等待 对于所有事件,则修改所有事件。这就是文档的内容 指“一个或多个对象”。如有,单数;如有,复数 等等


一般来说,最好尽量避免这种构造。我会让每个信号线程将一个合适的索引、委托或任何东西推送到一个线程安全队列上,并发送一个信号量。这是围绕这个问题设计的-行为是完全已知和可预测的,即使一个线程多次发出信号,也不会丢失任何事件,没有64个句柄限制,并且在编译时发送信号的线程数不是固定的。
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...
    }
}