Как узнать, правильно ли завершился QThread или был прекращен? - PullRequest
0 голосов
/ 23 ноября 2018

Я обнаружил, что в Qt 4.8 был прерван сигнал, как вы можете видеть здесь: http://doc.qt.io/archives/qt-4.8/qthread.html#terminated

Но сейчас в Qt 5.8 такого нет.http://doc.qt.io/archives/qt-5.8/qthread.html

Кажется, что сигнал завершения звучит, если завершена нить и даже если нить завершена.Но есть ли способ узнать, правильно ли завершился QThread или был прерван?

1 Ответ

0 голосов
/ 30 ноября 2018

Я использовал следующую схему, предложенную @ Scheff

class MyQThread(QThread):
    def __init__(self):
        self.__terminated = None
        super().__init__()

    def wasTerminated(self):
        if self.__terminated is None:
            return True
        return False

    def run(self):
        # Add at end of run
        self.__terminated = False

И следующую в вызывающей программе:

class Worker(QObject):
    def __init__(self):
        super().__init__()
        self.thread = MyQThread()
        self.thread.finished.connect(self.finishedSlot)

    def finishedSlot(self):
        if self.thread.wasTerminated():
            print("Thread was killed before finished")
        else:
            print("Thread results are ok")
...