我有一个使用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)
....