Seite 1 von 1

QThread & exec()

Verfasst: 24. September 2006 16:41
von GwarDrazul
Hallo zusammen,
Wenn ich in einer QThread subklasse in der run() Methode wird exec() aufrufe friert der Thread an dieser Stelle ein, d.h. nichts passiert mehr. Darum habe ich das exec() bislang immer weggelassen, die Signals-Slots Verbindungen klappen auch so. Meine Frage ist: ich dachte man bräuchte das exec() für Signal-Slots Verbindungen zwischen Threads? Habe ich da was falsch verstanden? Wie wird exec() - "korrekt" eingesetzt (also ohne, das der Thread an der Stelle des Aufrufs pausiert).

Vielen Dank und viele Grüße,
Gwar

Verfasst: 24. September 2006 17:02
von Christian81
Woher kommt diese Exec() - Methode?

Verfasst: 25. September 2006 09:34
von GwarDrazul
Hallo,

exec() ist eine "protected" Methode von QThread.
In der Docu steht weiterhin:
Each QThread can have its own event loop. You can start the event loop by calling exec(); you can stop it by calling exit() or quit(). Having an event loop in a thread makes it possible to connect signals from other threads to slots in this threads, using a mechanism called queued connections.
Ich bin mir sicher, dass ich hier etwas falsch verstanden habe. Meine Signal / Slots Verbindungen scheinen auch ohne exec() zu klappen. Wofür braucht man es dann?

Grüße,
Gwar

Verfasst: 25. September 2006 09:56
von Christian81
Oh, habe aus Versehen in 3.3 geschaut - da gibts das noch nicht.
exec() reagiert doch korrekt - es geht in die EventLoop bis exit() aufgerufen wird (demnach nur von aussen möglich).

"to connect signals from other threads to slots in this threads" - also funktioniert es von dem Thread zum Hauptthread, aber andersrum nur wenn man exec() benutzt.

Verfasst: 26. September 2006 12:13
von GwarDrazul
ich hätte auch schreiben sollen, welche Qt Version ich verwende. Sorry.

Danke für die Ausführung. Da ich nur vom Thread zum Hauptthread verbinde klappt es also. Zum Glück brauch ich es andersrum (noch) nicht ;-)

Vielen Dank,
Gwar