我在寫一個利用QThreads的多線程應用程序。我知道,爲了啓動一個線程,我需要重寫run()
方法,並在某處使用thread.start()
(在我的GUI線程中)調用該方法。當QThread()停止運行(Python)時,是否需要手動調用.quit()方法?
我想知道,但是,是否需要在任何地方撥打.wait()
方法,我也應該在線程完成後調用.quit()
,或者這是自動完成的?
我正在使用PySide。
感謝
我在寫一個利用QThreads的多線程應用程序。我知道,爲了啓動一個線程,我需要重寫run()
方法,並在某處使用thread.start()
(在我的GUI線程中)調用該方法。當QThread()停止運行(Python)時,是否需要手動調用.quit()方法?
我想知道,但是,是否需要在任何地方撥打.wait()
方法,我也應該在線程完成後調用.quit()
,或者這是自動完成的?
我正在使用PySide。
感謝
兩個答案取決於你的代碼做什麼,你從線程的期望。
如果您的使用線程的邏輯需要等待QThread結束的同時,那麼您需要撥打wait()
。然而,這種要求是一個馬虎的線程模型的標誌,除了像應用程序啓動和關閉這樣的特殊情況。 QThread::wait()
的使用暗示蠕變順序操作,這意味着您實際上不會同時使用線程。
quit()
退出QThread內部事件循環,這不是強制使用。長時間運行的線程(與單任務工作者相反)必須具有某種事件循環 - 這是一種通用語句,並非QThread特有的。你要麼自己做(以一些while(keepRunning) { }
週期的形式),要麼使用Qt提供的事件循環,在你的run()
方法中調用exec()
來觸發。前者的實現由您完成,因爲您確實提供了keepRunning
條件。 Qt提供的實現對你來說是隱藏的,在這裏進行quit()
調用 - 內部除了在Qt內部設置某種類似的標誌之外無非是。