我正在使用以下函数创建 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/