我有一个使用 QThreads 的应用程序。我正在向排队连接添加不同的方法,它们按该顺序运行。这一直运作良好。但是取决于测试的顺序(序列可以是任何顺序),我的应用程序将停止(它不会冻结,但它不会完成调用队列中的其余测试)。例如,如果运行序列 [test1, test2, test3]。我将能够运行并完成(发出完成信号)test1 和 test2,但不会调用 test3。然而,这只是偶尔发生,而不是一直发生。我认为线程在所有任务完成之前就退出了。有什么我应该清理的吗?
相关代码如下:
# Initialize QThread
self.obj = signalTest.Worker()
self.thread = QThread()
self.obj.moveToThread(self.thread)
self.obj.finished.connect(self.signalFinished)
def runTests(self) # This is triggered by clicking a button
self.thread.start()
for index in range(0, len(sequence)):
if self.queue[index] == 'test1'
QMetaObject.invokeMethod(self.obj, 'run_test1', Qt.QueuedConnection,
Q_ARG(int, index)
elif self.queue[index] == 'test2'
QMetaObject.invokeMethod(self.obj, 'run_test2', Qt.QueuedConnection)
elif self.queue[index] == 'test3'
QMetaObject.invokeMethod(self.obj, 'run_test3', Qt.QueuedConnection)
@pyqtSlot(int)
def signalFinished(self, row)
# Do something here
工作线程:
class Worker(QObject):
finished = pyqtSignal(int)
@pyqtSlot(int)
def test1(self):
"""
Runs test1
"""
if self.abort is False:
# Run test1 here
self.finished.emit(row)
....