我使用的是 PySide 版本 1.2.2,它包装了 Qt v4.8 框架。QThread
我面临的情况是,我必须在让我的应用程序等待我不再需要正常退出的情况(线程很可能会无限期地阻塞)和给无响应的线程一个宽限期(几秒钟)之间做出选择),然后调用QThread.terminate()
它。尽管我希望可以,QThread
但当底层线程仍在运行时,我不能让对象超出范围,因为这会抛出错误“QThread:线程仍在运行时被销毁”,并且几乎肯定会导致段错误。
请注意,我知道终止QThread
s 是危险的并且强烈建议不要这样做。我只是想在这里探索我的选择。
然而,当我尝试终止线程时,我的应用程序崩溃并出现以下错误:
Python 致命错误:释放时该线程状态必须是当前状态
您可以通过复制/粘贴并运行以下代码自行尝试:
from PySide import QtCore, QtGui
class Looper(QtCore.QThread):
"""QThread that prints natural numbers, one by one to stdout."""
def __init__(self, *args, **kwargs):
super(Looper, self).__init__(*args, **kwargs)
self.setTerminationEnabled(True)
def run(self):
i = 0
while True:
self.msleep(100)
print(i)
i += 1
# Initialize and start a looper.
looper = Looper()
looper.start()
# Sleep main thread for 5 seconds.
QtCore.QThread.sleep(5)
# Terminate …
Run Code Online (Sandbox Code Playgroud)