WaitForMultipleObjects () сбрасывает все события автоматического сброса? - PullRequest
6 голосов
/ 19 марта 2012

У меня есть цикл событий, который ожидает нескольких событий с автосбросом.Все события были инициализированы в массив 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 Ответ

5 голосов
/ 19 марта 2012

"... изменение происходит только для объекта или объектов, сигнальное состояние которых заставило функцию вернуться ..."

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

И из уст одного Раймонд Чен :

Если ожидается одно событие, то будет изменено только это событие.Если ждут все события, то все будут изменены.Это то, что документация подразумевает под «объектом или объектами».Единственное число, если ждать - любое, множественное число, если ждать - все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...