小编nul*_*atz的帖子

PySide QThread.terminate() 导致致命的 python 错误

我使用的是 PySide 版本 1.2.2,它包装了 Qt v4.8 框架。QThread我面临的情况是,我必须在让我的应用程序等待我不再需要正常退出的情况(线程很可能会无限期地阻塞)和给无响应的线程一个宽限期(几秒钟)之间做出选择),然后调用QThread.terminate()它。尽管我希望可以,QThread但当底层线程仍在运行时,我不能让对象超出范围,因为这会抛出错误“QThread:线程仍在运行时被销毁”,并且几乎肯定会导致段错误。

请注意,我知道终止QThreads 是危险的并且强烈建议不要这样做。我只是想在这里探索我的选择。

然而,当我尝试终止线程时,我的应用程序崩溃并出现以下错误:

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)

python qt multithreading pyside qthread

5
推荐指数
1
解决办法
4912
查看次数

标签 统计

multithreading ×1

pyside ×1

python ×1

qt ×1

qthread ×1