2012-11-14 39 views
1

我在寫一個利用QThreads的多線程應用程序。我知道,爲了啓動一個線程,我需要重寫run()方法,並在某處使用thread.start()(在我的GUI線程中)調用該方法。當QThread()停止運行(Python)時,是否需要手動調用.quit()方法?

我想知道,但是,是否需要在任何地方撥打.wait()方法,我也應該在線程完成後調用.quit(),或者這是自動完成的?

我正在使用PySide。

感謝

回答

1

兩個答案取決於你的代碼做什麼,你從線程的期望。

如果您的使用線程的邏輯需要等待QThread結束的同時,那麼您需要撥打wait()。然而,這種要求是一個馬虎的線程模型的標誌,除了像應用程序啓動和關閉這樣的特殊情況。 QThread::wait()的使用暗示蠕變順序操作,這意味着您實際上不會同時使用線程。

quit()退出QThread內部事件循環,這不是強制使用。長時間運行的線程(與單任務工作者相反)必須具有某種事件循環 - 這是一種通用語句,並非QThread特有的。你要麼自己做(以一些while(keepRunning) { }週期的形式),要麼使用Qt提供的事件循環,在你的run()方法中調用exec()來觸發。前者的實現由您完成,因爲您確實提供了keepRunning條件。 Qt提供的實現對你來說是隱藏的,在這裏進行quit()調用 - 內部除了在Qt內部設置某種類似的標誌之外無非是。

相關問題