2012-06-08 33 views
0

有沒有辦法找出所有當前信號燈在Windows中?檢測當前所有信號燈信號

一種方法是調用WaitForMultipleObjects的(bWaitAll = FALSE,dwMilliseconds = 0)
多次,每次取出一個(信號)手柄,直到我們得到了一個WAIT_TIMEOUT,
但這是繁瑣和緩慢的。

有沒有更好的方法?

+0

這是非常重要的,這樣做*永遠*不正確。你知道它*是*信號,你對當前狀態一無所知。 winapi不會給你一個簡單的方法來做錯誤的事情。 –

+0

我不需要確切的* current *狀態,但需要儘快處理一批(已發佈)資源。 您的邏輯可能會稍微拉長,以聲明信號量上的WaitForMultipleObjects(bWaitAll = TRUE)也永遠不會正確。 –

回答

0

WaitForSingleObject()?我不認爲任何標準函數都會給出信號對象的位掩碼/數組。

+0

WaitForSingleObject()更糟糕:我們總是需要調用它n次 –

+0

但是,與重複的每次WaitForMultipleObjects()重新排序數組相比,這是如何進行比較的?我知道這將是一個呼叫,而不是每個呼叫,但重新洗牌的開銷可能抵消這取決於有多少信號。 – Deanna

+0

不需要重新洗牌:一個簡單的句柄[r] =句柄[ - n]將執行,這比進行系統調用快了幾個數量級。 –