Seite 1 von 1
Re: Qt - Threads - Timers cannot be stopped from another thread
Verfasst: Freitag 22. September 2023, 18:32
von __deets__
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.
Re: Qt - Threads - Timers cannot be stopped from another thread
Verfasst: Freitag 22. September 2023, 19:36
von __deets__
Warum drehst du die Threads nicht einfach um, wie vorgeschlagen?
Re: Qt - Threads - Timers cannot be stopped from another thread
Verfasst: Samstag 23. September 2023, 12:48
von __deets__
sys.exit beendet das Programm sofort. Wenn du das nicht willst, musst du stattdessen den Hintegrundthread geordnet runterfahren.
Re: Qt - Threads - Timers cannot be stopped from another thread
Verfasst: Samstag 23. September 2023, 13:02
von __deets__
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.
Re: Qt - Threads - Timers cannot be stopped from another thread
Verfasst: Samstag 23. September 2023, 17:46
von __blackjack__
@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.