如何阻止QThread关闭?

2 投票
1 回答
921 浏览
提问于 2025-04-17 19:41

我正在为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 个回答

7

其实这是Python和Qt结合使用时的一种小问题。你在一个函数里创建的QThread(比如在MainWidget.update_software这个函数里)会在函数结束时被自动清理掉,这样就会导致程序提前结束,并出现QThread: Destroyed while thread is still running的提示。

要解决这个问题,有两个方法:

  1. 在函数里对线程调用.wait(),这样可以确保线程在函数返回之前完成处理。不过这样会让主线程停下来,可能不是你想要的效果。
  2. 把所有线程实例设置为实例变量或者全局变量,这样线程的生命周期就会和它所在的实例或程序的运行时间一致。

撰写回答