6
我有一個事件循環等待幾個自動重置事件。 事件全部被初始化爲數組eventHandles_
與CreateEvent(NULL, false, false, NULL)
。WaitForMultipleObjects()是否重置所有自動重置事件?
while (true)
{
DWORD waitResult = WaitForMultipleObjects(3, eventHandles_, false, INFINITE);
switch (waitResult)
{
case WAIT_OBJECT_0 + 0:
//handle event...
case WAIT_OBJECT_0 + 1:
//handle event...
case WAIT_OBJECT_0 + 2:
//handle event...
}
}
我的問題:如果事件1和2同時發生,循環將處理WAIT_OBJECT_0 + 1
,因爲它是第一個。但是當循環再次出現時,事件2是否會保持信號?還是會自動重置?
一般來說,最好儘量避免這樣的結構。我會讓每個信令線程將合適的索引,委託或其他任何內容推送到線程安全隊列中,併發出單個信號量的信號。這是圍繞着這個問題而設計的 - 行爲是完全已知的和可預測的,即使一個線程不止一次發出信號,也不會有事件丟失,沒有64個句柄的限制,並且在編譯時沒有固定信號的數量。 – 2012-03-19 19:37:24