当bWaitAll为TRUE时,WaitForMultipleObjects返回值

ida*_*hmu 6 c++ winapi return handle waitformultipleobjects

由于一些人有文档的不同的解释,我想澄清一劳永逸的所有返回值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?
Run Code Online (Sandbox Code Playgroud)

我想验证条件的正确性.

Jon*_*ter 6

文档是相当明显,从返回代码WAIT_OBJECT_0通过对WAIT_OBJECT_0 + NCOUNT - 1,如果等待被满足后,将返回:

如果bWaitAll为TRUE,则返回值表示发出所有指定对象的状态.

它没有指定确切的值,因此没有人可以肯定地说它将在该范围内.

所以不要测试if (dwWaitForMultipleObjectsRes == WAIT_OBJECT_0),你应该测试:

if ((dwWaitForMultipleObjectsRes >= WAIT_OBJECT_0)
&& (dwWaitForMultipleObjectsRes < (WAIT_OBJECT_0 + dwOpenProcessCount)))
{
    // wait satisfied, all objects signalled
}
Run Code Online (Sandbox Code Playgroud)