Ein Slot ist ein Stück Code, es "lebt" nicht in einem Thread - ein Thread könnte es ausführen oder auch nicht, aber der Code selbst gehört keinem Thread. (Wenn der Slot eine Member-Funktion ist, dann gehört das als Empfänger definierte Qt-Objekt einem Qt-Thread an - das ist eine Eigenschaft des Objekts, nicht der Funktion.)
Im obigen Code generiert der Compiler ein Objekt, das:
receiver
nach Wert erfasst ([=]
)
- einen Funktionsaufratsoperator hat, der mit einem Verweis auf ein konstantes QString aufgerufen werden kann.
Dieses Objekt wird zusammen mit den anderen beiden Argumenten an connect
übergeben. Es handelt sich nicht um ein QObject
, daher hat es keinen eigenen Thread im Qt-Sinn. Worauf Sie achten müssen ist folgendes:
- was
receiver
zeigt, bleibt so lange bestehen, wie das Signal verbunden ist
receiver->updateValue(...)
ist threadsicher - es wird im Kontext/Thread von sender
aufgerufen.
Wenn receiver->updateValue
im Thread/Kontext von receiver
aufgerufen werden muss, verwenden Sie nicht diese Syntax für den connect
-Aufruf, sondern diejenige, in der Sie sowohl Sender als auch Empfänger und den Verbindungstyp angeben.