2012-05-14 21 views
1

我的windows/QT應用程序不是一致退出。如何使用C++關閉所有子線程

對象清理後,我試圖刪除QProcess中的對象。但它並沒有清理過程,它可以顯示在任務管理器中。

delete process; 
    process = 0; 

我想刪除過程是行不通的,因爲一些線程在後臺運行。我想確保所有線程都優雅地關閉,因此該進程將退出。

請讓我知道正確的方法來做到這一點。

+0

迭代你的線程集合和'加入'他們每個人。 –

+0

Kerrek,你的意思是使用Windows API並執行此操作。你能建議api的名字嗎?謝謝 – JChan

+1

不,沒有Windows API。只需使用Qt線程模型。當然你已經記錄了你的所有線程?! –

回答

0

任務管理器不顯示你的QProcess中的對象,並刪除該對象不會影響任務管理器。如果您的進程中仍有代碼正在運行,則該進程將根據操作系統繼續存在。

如果你確實是想退出的過程,可以調用Win32函數ExitProcess()。只要確保你已經保存了你想要的一切。當你所有的線程停止運行

的Qt將正常退出的過程。

+0

Greg,我的團隊中有人建議Qprocess不要退出,所以請確保在刪除對象之前使用windows api並關閉所有線程。我不知道這是正確的方法..請指教 – JChan

0

一個問題可能是使用QProcess對象不表示一個子線程,它代表一個獨立的過程中,你可能想使用QThread對象。

隨着QThread的對象,你可以使用退出,退出的某種組合等,並根據你的子線程的確切內容終止,檢查文檔的差異。