由于有些人对文档有不同的解释,我试图一劳永逸地澄清 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?
我想验证条件的正确性。
最佳答案
documentation很明显,如果等待满足,将返回从 WAIT_OBJECT_0 到 WAIT_OBJECT_0 + nCount - 1 的返回码:
If bWaitAll is TRUE, the return value indicates that the state of all specified objects is signaled.
它没有指定确切的值,因此除了在该范围内之外,没有人可以确定它会是什么。
因此,与其测试 if (dwWaitForMultipleObjectsRes == WAIT_OBJECT_0)
,不如测试:
if ((dwWaitForMultipleObjectsRes >= WAIT_OBJECT_0)
&& (dwWaitForMultipleObjectsRes < (WAIT_OBJECT_0 + dwOpenProcessCount)))
{
// wait satisfied, all objects signalled
}
关于c++ - 当 bWaitAll 为 TRUE 时,WaitForMultipleObjects 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176205/