如何阻止QThread关闭?
我正在为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
的提示。
要解决这个问题,有两个方法:
- 在函数里对线程调用
.wait()
,这样可以确保线程在函数返回之前完成处理。不过这样会让主线程停下来,可能不是你想要的效果。 - 把所有线程实例设置为实例变量或者全局变量,这样线程的生命周期就会和它所在的实例或程序的运行时间一致。