6

由于有些人对文档有不同的解释,我试图一劳永逸地澄清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?

我想验证条件的正确性。

4

1 回答 1

6

文档非常清楚,如果满足等待,将返回从WAIT_OBJECT_0WAIT_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
}
于 2015-08-24T07:22:05.357 回答