当bWaitAll为TRUE时,WaitForMultipleObjects返回值

WaitForMultipleObjects return value when bWaitAll is TRUE

本文关键字:WaitForMultipleObjects 返回值 TRUE bWaitAll      更新时间:2023-10-16

由于有些人对文档有不同的解释,因此我试图在

时一次性澄清WaitForMultipleObjects的返回值
  1. bWaitAll = TRUE .
  2. 所有句柄都有信号

基于文档:

WAIT_OBJECT_0 to (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_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
}
相关文章:
  • 没有找到相关文章