我創建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