2017-04-21 1 views
1

zur Lösung Code Bezug Schließen hier berichteteWie beenden/schließen/korrekt einen Thread beendet werden, wenn der GUI-Thread in Qt

How to run a timer inside a QThread?

es nicht erwähnt wird, wenn man sigsev Fehler bei der Haupt auftreten kann (GUI) Thread ist geschlossen (mit der X-Taste zum Beispiel).

Meine Frage ist, wie soll ich umgehen (wenn sollte ich es an erster Stelle behandeln) die Beendigung des zweiten Threads für den Fall, dass der GUI-Thread beendet ist?

Falls die Daten/Ereignisse sind nicht mehr relevant, wenn die GUI Kündigung ausgestellt wurde kann ich nur

m_thread->terminate(); 

im Mainwindow destructor oder in der überschriebenen Closeevent() ??

Falls die Daten/Ereignisse stattdessen relevant sind?

+1

Vermeiden Sie unbedingt das explizite Beenden von Threads im Benutzercode, insbesondere im GUI-Benutzercode, sofern dies nicht zwingend erforderlich ist. Versuche wirklich sehr, keine Apps zu entwickeln, die eine explizite Thread-Terminierung benötigen. Setzen Sie nie, niemals, irgendeine Art von 'beenden' Flag und warten Sie dann in einem GUI 'OnClose' Event-Handler, Form-Destruktor oder ähnliches, mit join() oder loop oder irgendeiner anderen Art von Warten. – ThingyWotsit

+0

Mögliches Duplikat von [QThread beenden, wenn die GUI-Anwendung beendet wird] (http://stackoverflow.com/questions/41411746/exit-qthread-when-gui-application-exits) – m7913d

+0

Siehe auch die Qt-Dokumentation von [QThread :: terminate] (http://doc.qt.io/qt-5/qthread.html#terminate) und [QThread] (http://doc.qt.io/qt-5/qthread.html#details) selbst. Ein klares Beispiel wird bereitgestellt. – m7913d

Antwort

0

Meine Frage ist, wie soll ich behandeln die Beendigung des zweiten Thread, falls der Thread GUI (wenn soll ich es in erster Ort behandeln) ist beendet?

Wenn der GUI-Thread beendet ist, haben wir die App in der Regel den Prozess beenden? Sagen wir "GUI thread termining" oder vielleicht besser "exitting" oder "quitting" bedeutet, dass die GUI-Ereignisschleife bereits beendet wurde, so dass keine Interaktion mehr mit Worker-Threads aus dem GUI-Thread erfolgt. Möglicherweise müssen wir bestimmte Ressourcen, die von den Worker-Threads verwaltet werden, möglicherweise noch explizit freigeben. Andernfalls können wir den Prozess möglicherweise hängen lassen, während wir auf ihre Veröffentlichung warten.

Verwandte Themen