leider habe ich für den Betreff keine bessere Aussage gefunden. Nachfolgend stelle ich euch insgesamt drei Varianten vor, wie ich mit QThread() arbeite. Vielleicht kommen wir ohne lauffähigen Quelltext aus. Mir geht es um das Verständnis.
Variante 1
Hier übergebe ich der QThread()-Klasse das self,. Zusätzlich speichere ich einen Verweis auf den QThread(), nachdem dieser erstellt wurde. Schließlich wollen wir nicht, dass Python nach dem Verlassen der Methode aufräumt und somit die Threads beseitigt.
Code: Alles auswählen
[...]
self.task_thread = QThread(self)
self.task_thread.work.moveToThread(self.task_thread)
[...]
Variante 2QThread: Destroyed while thread is still running
Im Unterschied zur ersten Variante wird der QThread() in eine lokale Variabel gespeichert, jedoch übergebe ich hier den Self, in der Hoffnung, Paython räumt nicht auf, sondern behält den Thread.
Code: Alles auswählen
[...]
task_thread = QThread(self)
task_thread.work.moveToThread(task_thread)
[...]
Variante 3QThread: Destroyed while thread is still running
Hier übergebe ich dem QThread() keinen Self, sondern speichere diesen nur in einem Attribut. Dadurch erhalte ich eine Referenz / einen Verweis auf den QThread().
Code: Alles auswählen
[...]
self.task_thread = QThread()
self.task_thread.work.moveToThread(self.task_thread)
[...]
Nun meine Frage. Wieso schlagen die ersten beiden Varianten fehl und die dritte Variante klappt? Meine Vermutung geht dahin, dass durch die Übergabe des Selfs an den QThread() dieser nicht länger "gehalten" wird. Aber sicher bin ich mir da nicht.