0

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

0 回答 0