c++ - 当 bWaitAll 为 TRUE 时,WaitForMultipleObjects 返回值

标签 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?

我想验证条件的正确性。

最佳答案

documentation很明显,如果等待满足,将返回从 WAIT_OBJECT_0WAIT_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/

相关文章:

c++ - 交换属性 a[i] == i[a]

c++ - 模板如何导致 C++ 中的代码膨胀?

wpf - 确保 WPF 窗口始终位于顶部,即使用户单击另一个最大化的应用程序也是如此

java - 如何使用 try catch 从字符串中获取两条数据?

java - 返回ArrayList并在另一个方法中使用它

c - 如何在不使用 C 中的结构的全局声明的情况下返回结构

c++ - 我的函数返回一个错误的值 C++

c++ - 为什么这会在 const 方法中返回一个 const X* const 指针?

c - 多个原始输入缓冲区

windows - vbscript 中的 CommonAppData