2013-02-20 64 views
0

我想僅與WINAPI調用同步線程,但我沒有成功。 只要我的WNDPROC收到消息,情況就是LOG日誌和日期活動。 問題是我的WNDPROC需要寫入日誌,因爲寫入文件需要時間,所以它會失控。我試圖在WNDPROC開始時立即進入關鍵部分,並在寫入日誌完成後立即離開關鍵部分,但沒有運氣。如何讓他們相互等待?使用WINAPI同步線程

+1

沒有代碼示例,你的Q不清楚。自動取款機我相信你不正確地使用SC - 你需要在每個線程中輸入CS,而不是主要。 – Maximus 2013-02-20 06:16:57

+1

正如@Maximus所暗示的,如果你的日誌記錄全部在你的窗口中,那麼它就全部在同一個線程中。 – HerrJoebob 2013-02-20 07:45:55

回答

1

不要等待 - 排隊。

Windows消息太小了(本身:),將整個消息複製到生產者 - 消費者隊列是一種合理的方法。你可以提出你自己的隊列類,或者你也許可以使用PostThreadMessage()API接收到的信息複製和排隊到記錄器線程:

http://msdn.microsoft.com/en-gb/library/windows/desktop/ms644946%28v=vs.85%29.aspx

與PTM(的障礙)是唯一的消息數據被複制並排隊 - 沒有時間/日期。在獲取消息複製時,時間/日期必須添加到記錄器線程中。檢查你的要求,看看這是否可以接受。如果沒有,您將不得不使用包含Windows消息和日期/時間成員的不同「消息」結構。

隊列將UI線程從可能冗長的磁盤日誌記錄寫入操作中隔離出來,並且允許額外的靈活性來合併懶惰寫入和其他此類優化(如果需要)。

+0

這將工作得很好,非常感謝你! – 2013-02-20 18:32:42