2

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

目前,我在使用 QThread 进行线程处理时遇到问题,因为所有线程似乎都提前关闭了。我收到错误:QThread: Destroyed while thread is still running。除了做我之前在代码中所做的事情之外,还有什么方法可以解决这个问题

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

因为我确信这是非常糟糕的做法并且效果不佳,因为它会导致应用程序在某些时候没有响应。

4

1 回答 1

7

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

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

  1. 调用.wait()函数内部的线程,以便线程可以在函数返回之前完成处理。然而,这将阻塞主线程,这可能不是你想要的。
  2. 使所有线程实例成为实例变量或全局变量,以便线程的生命周期分别持续包含的实例或程序的持续时间。
于 2013-03-20T00:39:04.093 回答