如何阻止关闭QThread?

时间:2013-03-19 23:22:40

标签: python qt pyside

我正在为Minecraft编写一个启动器(请参阅完整代码:http://pastie.org/6633420),我知道这是一款游戏,但编程仍然很有趣。

目前,我遇到了使用QThread进行线程化的问题,因为所有线程似乎都应该关闭。我收到错误:QThread: Destroyed while thread is still running。有没有办法解决这个问题,除了我之前在代码

中所做的事情
for i in range(1,50):
    QThread.msleep(200)
    QCoreApplication.processEvents()

因为我确定它真的很糟糕并且效果不好,因为它导致应用程序在某些时候没有响应。

1 个答案:

答案 0 :(得分:7)

这实际上是Qt的Python绑定中的一种错误。函数内部QThread实例化(在您的情况下为MainWidget.update_software)在函数返回时进行垃圾收集,这会导致执行在QThread: Destroyed while thread is still running消息的早期结束。

要解决此问题,有两种选择:

  1. 在函数内的线程上调用.wait(),以便线程可以在函数返回之前完成处理。但这会阻塞主线程,这可能不是你想要的。
  2. 使所有线程实例分别为实例变量或全局变量,以便线程的生命周期分别持续包含的实例或程序的持续时间。