2013-10-17 46 views
0

我有一個列表,其中有要處理的數據。我有2個線程,訪問列表項時UI和工作線程同步列表項

UI線程:更新/添加列表項,

主題1:一旦項添加到列表它由一個到另一個線程2發送的項目之一,

線程2 :它是否工作並相應地更新項目,一旦它完成它的工作,它將檢查列表以及相應項目是否仍然存在於列表中,如果存在,它將處理數據。

從關閉窗口時的UI線程中,我刪除了從UI添加的地圖中的項目。以便線程2不會處理從列表中刪除的項目。

並從UI destruct或,我刪除列表中添加的項目實例。

的問題是,線程2已經在處理一個項目,在平均時間窗口關閉,也析構函數刪除其通過螺紋2.

是加工過程中的項目,以便在數據的處理線程2崩潰。

我已經在MFC中完成了這項工作。如何同步這兩個線程(UI刪除和線程2)。我知道MFC中有不同的線程同步方法。哪種方法最適合這種情況?

回答

1

當你想暫停操作(也許當用戶點擊關閉按鈕時),首先你告訴線程退出。這可以通過線程或線程定期執行的事件(SetEvent)來完成。在您告訴線程退出之後,您必須先刪除UI或線程正在使用的任何數據,直到您確定該線程已退出。使用WaitForSingleObject中的線程句柄等待線程退出。 WaitForSingleObject掛起調用線程,直到線程處理信號表示線程退出。然後你可以繼續刪除和UI關閉。