2013-03-19 563 views
2

我正在爲Minecraft編寫一個啓動程序(請參閱完整代碼:http://pastie.org/6633420),我知道這是一款遊戲,但它仍然很有趣。如何從關閉中停止QThread?

目前,我遇到了與QThread線程有關的問題,因爲所有線程在它們應該之前似乎都關閉了。我收到錯誤:QThread: Destroyed while thread is still running。有沒有什麼辦法來解決這個問題,除了做什麼,我在前面這是

for i in range(1,50): 
    QThread.msleep(200) 
    QCoreApplication.processEvents() 

代碼做,因爲我敢肯定,這非常糟糕的做法,並不能很好地工作,因爲它會導致應用程序是在一些反應遲鈍點。

回答

6

這實際上是Qt的Python綁定中的一種錯誤。 QThread在函數內部實例化(MainWidget.update_software,在你的情況下)在函數返回時被垃圾回收,這導致執行提前結束,消息爲QThread: Destroyed while thread is still running

爲了解決這個問題,有兩個選項:在函數內部線程

  1. 呼叫.wait()所以線程可以在函數返回之前完成處理。這將阻止主線程,但是,這可能不是你想要的。
  2. 使所有線程實例都變爲實例變量或全局變量,以便線程的生命週期分別持續包含的實例或程序的持續時間。
+0

非常感謝!這真的有幫助。這實際上不僅僅是我希望的解決方案。 – polandeer 2013-03-20 02:31:34

+0

**使所有線程實例都是實例變量或全局變量,以便線程的生命週期分別持續包含的實例或程序的持續時間。**僅突出顯示答案。 +1 – 2014-03-27 13:58:26