所以,這是問題:多線程對象破壞MFC對話框
我已經寫了包裝類暴露簡化的API爲libtorrent C++庫。它(包裝器)有一個堆棧分配的成員,它是libtorrent的主會話對象。 庫本身使用boost框架及其線程化功能 - 它是多線程的。 (我必須說我並不是很熟悉boost。)
現在,我想創建一個簡單的基於MFC對話框的應用程序,它將具有用於管理會話,進度條等的幾個按鈕。
libtorrent會話的析構函數可能需要一段時間才能完成(因爲它需要通知跟蹤器它正在關閉)。用戶被提示退出時使用MessageBox來確認下載終止,所以我認爲將我的包裝器對象作爲應用程序類的成員而不是CDialog(包裝器析構器,因此會話將踢出在對話框關閉後)。 Libtorrent文檔還指出,在調用析構函數之前關閉諸如Windows之類的UI是一個好主意。
這裏有趣的部分 - 一切正常,直到我關閉對話框。該過程繼續活着幾秒鐘,然後崩潰與一些升壓相關的鎖/關鍵部分的東西(這是調試指出的地方,一些鎖定/釋放呼叫在其中一個升壓頭)...
編輯
似乎在關閉時,主窗口會執行一些線程檢查,並進入某種「不規則」狀態,導致提升失敗。我想某種「加入」是需要爲GUI線程,以等待其他線程終止...
如果有人明白我想在這裏解釋什麼,並有一些想法我在做什麼錯誤的,或者有這個概念的替代解決方案,我真的很感激它。
謝謝。
正如我所說,我在torrent文件庫中編寫了封裝。你的回答,與問題部分無關,表明我應該搞亂圖書館的來源,我敢肯定我不會去做。 Libtorrent應該注意自己加入線程。 – Less 2012-08-03 05:44:50