2010-12-09 37 views
0

假設我的線程函數中有一個switch語句,用於評估觸發事件。每種情況都是不同的事件。在案件結束時或在開始時撥打電話ResetEvent是否更好?在我看來,它應該結束,以便事件不能再次觸發,直到線程完成前一個事件的處理。如果它被放置在開始處,則該事件可以在被處理時被再次觸發。重置線程事件 - C++

回答

1

是的。認爲這是要走的路。創建一個手動重置事件(API的第二個參數CreateEvent),以便事件在設置後不會自動重置。

1

如果您使用單個事件對象處理傳入流量(意味着您沒有入站隊列),您將錯過事件。這真的是你想要的嗎?

如果你想捕捉所有事件,一個成熟的生產者 - 消費者隊列將是更好的選擇。 Boost.Thread的參考實現here。與多線程代碼再度出現的時間和

的一個問題是如何 將數據從一個線程轉移到另一個 。例如,並行串行算法一個常見方式 是 將其分割成獨立塊 ,使管道 - 在 每個階段流水線可在單獨 線程上運行,並且每個階段增加了數據 到輸入隊列在下一個階段 完成。爲了正確工作 ,輸入隊列需要寫入 ,以便數據可以安全地由一個線程添加 ,並通過另一個線程刪除 而不會破壞 數據結構。