如何从关闭中停止QThread?

问题描述:

我正在为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() 

代码做,因为我敢肯定,这非常糟糕的做法,并不能很好地工作,因为它会导致应用程序是在一些反应迟钝点。

这实际上是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