如何从关闭中停止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
。
为了解决这个问题,有两个选项:在函数内部线程
- 呼叫
.wait()
所以线程可以在函数返回之前完成处理。这将阻止主线程,但是,这可能不是你想要的。 - 使所有线程实例都变为实例变量或全局变量,以便线程的生命周期分别持续包含的实例或程序的持续时间。
非常感谢!这真的有帮助。这实际上不仅仅是我希望的解决方案。 – polandeer 2013-03-20 02:31:34
**使所有线程实例都是实例变量或全局变量,以便线程的生命周期分别持续包含的实例或程序的持续时间。**仅突出显示答案。 +1 – 2014-03-27 13:58:26