c++ - win32 : Get the state of an event object

标签 c++ winapi

我正在使用以下函数创建 3 个事件:

HANDLE WINAPI CreateEvent(...);

我正在等待所有(bWaitAll 设置为TRUE)事件对象或超时:

DWORD WINAPI WaitForMultipleObjects(...); 

返回值为:

WAIT_TIMEOUT

是否有一种简单的方法来检查每个事件以找到未设置的事件?

举个例子:

HANDLE evt1 = ....
HANDLE evt2 = ....
HANDLE evt3 = ....

HANDLE evts[3] = ....

DWORD ret = ::WaitForMultipleObjects(3, evts, TRUE, 10000);

10 秒后:

  • 'ret' 是 WAIT_TIMEOUT。
  • evt1 已设置
  • 未设置 evt2
  • evt3 已设置

返回值告诉我“超时间隔已过,不满足 bWaitAll 参数指定的条件。”,但没有告诉我哪个发出了信号,哪个没有发出信号。

谢谢,

最佳答案

是的,在 WaitForMultipleObjects() 返回调用 WaitForSingleObject() 后指定零超时的每个事件。

它将为未发出信号的事件返回 WAIT_TIMEOUT,为发出信号的事件返回 WAIT_OBJECT_0。不要忘记检查 WAIT_FAILED。

与 WaitFormmultipleObjects() 返回时的状态相比,每个事件状态肯定都发生了变化。

关于c++ - win32 : Get the state of an event object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277917/

相关文章:

c++ - 为什么 SWIG 需要用 mt.exe 生成 list 文件?

c++ - 快速排序和合并排序错误的内存分配(不对超过 32k 的元素进行排序)

c++ - argc 和 argv 的目的是什么?

C++ 结构和构造

c - 为什么 CDROM_TOC.Length 是 UCHAR[2] 而不是 WORD?

c++ - 如何在 MFC 中重定向 TRACE 语句以减少来自 AfxDumpStack() 的数据流?

c++ - 编译器在这里生成的汇编代码中的寻址模式是什么?

c++ - 如何使用 FindFirstFiles 以数据顺序获取文件

c - 如果变体具有 INF 或 NAN 值,如何使变体的 ChangeType float ?

c++ - 是否可以从受歧视的 union 中自动提取类型?