我有一个使用QThread的GUI(PySide)应用程序。当异常发生时,我的QThread中会发出一个信号,以便我可以在主线程中处理异常。但是,启动线程的其余函数仍然会执行。我尝试使用wait
函数来阻止执行,但它不起作用。这是我的实现:
QThread子类:
class LongTaskThread(QtCore.QThread):
task_finished = QtCore.Signal()
task_failed = QtCore.Signal(Exception)
def __init__(self, allow_log=True, test_mode=False, parent=None):
QtCore.QThread.__init__(self, parent)
def run(self):
self.task_failed.emit(Exception())
def wait_with_gui_refresh(self):
while self.isRunning():
time.sleep(0.1)
if not self.test_mode:
QtGui.QApplication.processEvents()
主线程
def test():
my_thread = LongTaskThread()
my_thread.task_finished.connect(on_finished)
my_thread.task_failed.connect(on_failed)
my_thread.start()
# my_thread.wait() <---- tentative 1
# my_thread.wait_with_gui_refresh() <---- tentative 2
print('bla bla bla bla')
def on_finished)():
pass
def on_failed(err):
raise err
我原本以为print
语句永远不会执行,但无论是使用wait
函数、wait_with_gui_refresh
函数还是什么都不用,在QThread中抛出异常时,print
语句总是被执行。
如何在QThread内部抛出异常时停止测试函数?