我创建3个事件具有以下功能:的Win32:获取一个事件对象的状态
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秒后:
- '保留' 是WAIT_TIMEOUT。
- EVT1设置
- EVT2未设置
- EVT3设置
返回值告诉我:“超时间隔已过,由bWaitAll参数指定的条件不成立。” ,但不是哪一个被发出信号,哪一个不是。
感谢,
这种打败WaitForMultipleObjects的目的! – 2009-08-14 13:53:50
既然这已被接受,我应该在这里重复我的警告,这将实际*更改某些Sync对象的状态*。例如,如果您的“检查”成功完成互斥锁,那么您也将获得互斥锁的所有权。 – 2009-08-21 17:42:41
anon - 不是。您可以等待多个对象,然后使用等待单个对象来确定要设置哪个对象。 – 2013-01-04 22:39:03