Поскольку некоторые люди по-разному интерпретируют документацию, я пытаюсь раз и навсегда уточнить возвращаемое значение WaitForMultipleObjects когда
bWaitAll = TRUE
, На основании документации:
Возвращаемое значение
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?
Я хочу проверить правильность условия.
документация довольно ясно, что код возврата из 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
}