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...
}
}