Я создаю 3 события с помощью следующей функции:win32: Получить состояние объекта события
HANDLE WINAPI CreateEvent(...);
Я жду все (bWaitAll
устанавливается в TRUE
) объектов событий или тайм-аут с:
DWORD WINAPI WaitForMultipleObjects(...);
возвращаемое значение:
WAIT_TIMEOUT
Есть ли простой способ проверить каждое событие, чтобы найти тот, который был (где) не установлен?
В качестве примера:
HANDLE evt1 = ....
HANDLE evt2 = ....
HANDLE evt3 = ....
HANDLE evts[3] = ....
DWORD ret = ::WaitForMultipleObjects(3, evts, TRUE, 10000);
После 10 сек:
- 'RET' является WAIT_TIMEOUT.
- evt1 установлен
- evt2 НЕ установлен
- evt3 установлен
Возвращаемое значение говорит мне: «Интервал времени ожидания истекло, и условия, указанные в параметре bWaitAll не удовлетворены.» , но не тот, который был указан, а какой нет.
Спасибо,
Этот вид побеждает цель WaitForMultipleObjects! – 2009-08-14 13:53:50
Поскольку это принято, я должен повторить здесь свое предупреждение о том, что это фактически * изменит состояние * некоторых объектов Sync. Например, если ваш «чек» преуспеет для Mutex, вы также будете владеть мьютексом. –
anon - Не совсем. Вы можете подождать несколько объектов, а затем использовать ожидание для того, чтобы один объект работал, какой из них установлен. –