QThread & exec()

Alles rund um die Programmierung mit Qt
Antworten
GwarDrazul
Beiträge: 23
Registriert: 5. Juni 2006 18:56

QThread & exec()

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Woher kommt diese Exec() - Methode?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GwarDrazul
Beiträge: 23
Registriert: 5. Juni 2006 18:56

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GwarDrazul
Beiträge: 23
Registriert: 5. Juni 2006 18:56

Beitrag 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
Antworten