Qt - Threads - Timers cannot be stopped from another thread
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.
Um mal zu illustrieren, wie sowas gehen kann:
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.
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()
- __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?
