2017-04-21 122 views
1

關閉GUI線程時參考這裏如何終止/關閉/ Qt中

How to run a timer inside a QThread?

,如果能遇到SIGSEV錯誤的情況下,主要是沒有提到

報告的解決方案代碼退出正確的線(gui)線程關閉(例如用X按鈕)。

我的問題是我應該如何處理(如果我應該在第一個地方)終止第二個線程的情況下GUI線程終止?

如果一旦GUI終止已公佈的數據/事件不再相關可​​我只是

m_thread->terminate(); 
在主窗口的析構函數

或重寫的closeEvent()?

如果數據/事件相關而不是?

+1

除非完全被迫這樣做,否則應避免試圖明確終止用戶代碼中的線程,特別是GUI用戶代碼。不要試圖設計需要顯式線程終止的應用程序。永遠不要設置任何類型的「終止」標誌,然後用join()或任何其他類型的等待在GUI'OnClose'事件處理程序,表單析構函數或類似的形式中等待。 – ThingyWotsit

+0

[GUI應用程序退出時退出QThread]的可能重複(http://stackoverflow.com/questions/41411746/exit-qthread-when-gui-application-exits) – m7913d

+0

另請參閱[QThread :: terminate]的Qt文檔。 (http://doc.qt.io/qt-5/qthread.html#terminate)和[QThread](http://doc.qt.io/qt-5/qthread.html#details)本身。提供了一個明確的例子。 – m7913d

回答

0

我的問題是我應該如何處理(我是否應該處理它在第一 的地方)的第二個線程終止的情況下,在GUI線程 終止?

如果GUI線程被終止,我們通常會退出應用程序?比方說,「GUI線程終止」或者更好的「退出」或「退出」意思已經退出GUI事件循環,以便不再與來自GUI線程的工作線程交互。我們仍然可能必須顯式釋放由工作線程管理的某些資源,否則我們可能會在退出等待發布時阻止該進程。