2010-04-03 85 views
2

我擁有一個ChildView擁有一個工作線程。 (我打算最終將其移至Doc)。當工作線程完成任務時,我希望所有視圖都得到更新。我如何打電話告訴Doc發行UpdateAllViews()?還是有更好的方法?工作線程內的UpdateAllViews()?

謝謝。


由OP補充:我要尋找一個簡單的解決方案。該應用程序運行在單個用戶,單CPU電腦上,不需要網絡(或Internet)訪問。沒有什麼會導致僵局。

我想我想讓工作線程發佈(或發送)一條消息,以使視圖更新。

我所讀到的有關線程的一切似乎都比我需要的複雜得多 - 而且,我明白所有這些預防措施對於在多處理器,多用戶,客戶端 - 服務器系統等中運行的應用程序都是必需的。那些適用於我的情況。

我只是得到正確的組合獲取窗口句柄,張貼消息和響應正確的函數和類中的消息編譯和功能。

+0

@Harvey:多線程不侷限於多處理器/核心,多用戶或客戶端 - 服務器系統,你可以爲陷入死鎖甚至只要有多個線程和處理線程間通信時,最簡單的情況就是如此。但是你想發佈消息到GUI更新的主線程是好的(在工作線程中使用PostMessage,而不是SendMessage!)。這裏是另一個有用的答案,與你非常密切相關的問題:http://stackoverflow.com/questions/391125/how-to-change-pane-text-of-status-bar-from-a-thread-in- mfc – Slauma 2010-04-08 00:11:09

回答

2

UpdateAllViews不是線程安全的,因此您需要將調用編組到主線程。 我建議你signal a manual-reset event在WM_TIMER處理程序中標記你的線程的完成和check the event's status

推薦閱讀:

+0

請參閱添加註釋。 – Harvey 2010-04-04 00:47:34

+0

@盛,謝謝。我現在有信息發佈工作。即使我沒有這樣做,我會接受你的答案來解決這個問題。再次感謝。 – Harvey 2010-04-04 03:31:54