Qt - Threads - Timers cannot be stopped from another thread

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man kann keine GUI im anderen Thread betreiben. Geht einfach nicht. Die Funktion two hingegen, die kann im Hintergrund laufen. Sobald sie aber GUI-Elemente beeinflussen soll, muss das über die passenden Mitte wie zB QueuedConnections gehen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Warum drehst du die Threads nicht einfach um, wie vorgeschlagen?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

sys.exit beendet das Programm sofort. Wenn du das nicht willst, musst du stattdessen den Hintegrundthread geordnet runterfahren.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Um mal zu illustrieren, wie sowas gehen kann:

Code: Alles auswählen

import queue
import threading
import time

def background_task(task_queue):
    while True:
        action = task_queue.get()
        if action == "stop":
            print("stopping")
            break
        else:
            print("working hard on", action)



def main():
    tasks = queue.Queue()
    t = threading.Thread(target=background_task, daemon=True, args=(tasks,))
    t.start()
    tasks.put("important stuff")
    time.sleep(3)
    tasks.put("stop")
    t.join()


# main guard
if __name__ == '__main__':
    main()
Natuerlich muss bei dir die task-queue aus der GUI beschrieben werden, und die get-Methode kennt auch einen timeout oder eine empty-Exception, wenn der Task die ganze Zeit laeuft, und man nur mal schauen will. Aber man muss eben periodisch pruefen, ob man sich beenden soll.
Benutzeravatar
__blackjack__
User
Beiträge: 14371
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@bachatero18: Falls wir hier immer noch von Qt reden, könnte man das `finished()`-Signal von `QThread` einfach mit der `close()`-Methode vom Fenster verbinden.
Who is General Failure and why is he reading my hard disk?
Antworten