我有 3 個不同的執行緒,它們使用 Windows SetEventAPI 分別設定一個事件。
DWORD thFunc1(LPVOID)
{
...
SetEvent(event1);
...
}
DWORD thFunc2(LPVOID)
{
...
SetEvent(event2);
...
}
DWORD thFunc3(LPVOID)
{
...
SetEvent(event3);
...
}
WaitForMultipleObjects第 4 個執行緒正在使用API等待所有這些事件。
DWORD thCatch(LPVOID)
{
...
DWORD ret = WaitForMultipleObjects(3, arrHandles, FALSE, INFINITE);
...
}
我的問題是雙重的:
- 如果 3 個執行緒以幾乎相同的時間戳發出事件信號,是否保證事件的接收順序與發送順序相同?
- 如果問題 1 的答案是否定的,那么有什么方法可以使用 Windows API 來實作?
任何輸入將不勝感激。
uj5u.com熱心網友回復:
當WaitForMultipleObjects多個物件進入信號狀態時,API 呼叫會做出一個承諾:
如果多個物件變為信號,則該函式回傳陣列中第一個句柄的索引,其物件被信號。
多個物件發出信號的順序不能從WaitForMultipleObjects呼叫中確定。
如果事件發生的順序很重要,您將不得不在別處記錄該資訊。您可以使用帶有原子推送和彈出操作的單鏈表,并在新條目到達時發出事件信號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/438373.html
