2012-03-19 55 views
6

我有一个事件循环等待几个自动重置事件。 事件全部被初始化为数组eventHandles_CreateEvent(NULL, false, false, NULL)WaitForMultipleObjects()是否重置所有自动重置事件?

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

一般来说,最好尽量避免这样的结构。我会让每个信令线程将合适的索引,委托或其他任何内容推送到线程安全队列中,并发出单个信号量的信号。这是围绕着这个问题而设计的 - 行为是完全已知的和可预测的,即使一个线程不止一次发出信号,也不会有事件丢失,没有64个句柄的限制,并且在编译时没有固定信号的数量。 – 2012-03-19 19:37:24

回答