Verständnisfrage Signal Slot

Verschiedenes zu Qt
Antworten
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Verständnisfrage Signal Slot

Beitrag von anno1988 »

Hallo zusammen,

ich hätte mal eine Verständnisfrage zum Thema Signal und Slot.
  • Die connect Funktion ist ja thread-safe, sobald man ein Signal mit emit sendet. Ist das Ganze dann auch thread-safe, wenn man einen slot direkt aufruft (also z.B. klassen_objekkt->slot123(); ?
  • Kann man, wenn man Signals und Slot miteinander verbunden hat (mit der connect Funktion) und man mit emit ein Signal sendet, dieses an speziefische Slot senden, also nicht dass alle Slots das signal erhalten?
danke im Voraus für die Beantwortung.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Verständnisfrage Signal Slot

Beitrag von Christian81 »

Nur weil die connect() Funktion threadsafe ist heißt es nicht dass dann automatisch alles was irgendwie da dran hängt threadsafe ist. Das ist schon dein Problem.
Und zur zweiten Frage - nein.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Verständnisfrage Signal Slot

Beitrag von RHBaum »

Die connect Funktion ist ja thread-safe, sobald man ein Signal mit emit sendet.
die connect funktion selber ist thread safe, aber das ist ueberhaupt ned was du meinst ^^
das heisst nur, dass du connects (und damit meine ich wirklich connect(... ... ... ) ) aus mehreren threads raus aufrufen darfst ^^

Ich denke was du meinst, iss das der SIGNAL/SLOT mechanismus nen threadwechsel fuer Dich macht .... und das ist komplett anderes Kino.

und noch was, thread safe heisst nicht, das alles was du bei ner funktion verwendest, schon gegen multithreading abgesichert ist, sondern nur, das du in der Lage bist, das ueberhaupt selber abzusichern.
machen musst es eh allein. Am ende garantiert dir ne thread-safe funktion nur, das es keine Nebeneffekte gibt, auf die du keinen einfluss hasst ... beispielsweisse statische variablen etc verwendet werden.

"threadsafe" nicht mit "reentrant" verwechseln ...

Ciao ...
Antworten