WaitForMultipleObjects возвращает значение, когда bWaitAll равен TRUE

Поскольку некоторые люди по-разному интерпретируют документацию, я пытаюсь раз и навсегда уточнить возвращаемое значение WaitForMultipleObjects когда

  1. bWaitAll = TRUE,
  2. все ручки были сигнализированы

На основании документации:
Возвращаемое значение
WAIT_OBJECT_0 до (WAIT_OBJECT_0 + nCount– 1)
Если bWaitAll имеет значение TRUE, возвращаемое значение указывает, что состояние всех указанных объектов сигнализируется.

Вопрос

Скажем, я передал 5 ручек этой функции и все из них было сообщено, это возвращаемое значение WAIT_OBJECT_0?

Заметка

Я пытаюсь программно проверить, что WaitForMultipleObjects удалось.

DWORD dwWaitForMultipleObjectsRes = WaitForMultipleObjects(dwOpenProcessCount, handles, TRUE, m_dwWaitTimeForProcToBeKilled);
if (dwWaitForMultipleObjectsRes != WAIT_OBJECT_0)
// failed?

Я хочу проверить правильность условия.

6

Решение

документация довольно ясно, что код возврата из WAIT_OBJECT_0 Через WAIT_OBJECT_0 + nCount — 1 будет возвращен, если ожидание удовлетворено:

Если bWaitAll — ИСТИНА, возвращаемое значение указывает, что состояние всех
указанные объекты сигнализируются.

Здесь не указано точное значение, поэтому никто не может точно сказать, что это будет, кроме того, что будет в этом диапазоне.

Так что вместо тестирования if (dwWaitForMultipleObjectsRes == WAIT_OBJECT_0), вы должны проверить:

if ((dwWaitForMultipleObjectsRes >= WAIT_OBJECT_0)
&& (dwWaitForMultipleObjectsRes < (WAIT_OBJECT_0 + dwOpenProcessCount)))
{
// wait satisfied, all objects signalled
}
6

Другие решения


По вопросам рекламы [email protected]