Ich verwende einige QThread
in meiner Anwendung.Können Qt-Signale sicher von einem anderen QThread ausgegeben werden
Meine Objekte "leben" in verschiedenen Threads (ihre Besitzer Threads als Qt bedeutet, dass es anders ist) und Signal/Slots mit Warteschlangenverbindungen zu kommunizieren.
Nun, ich habe dieses Problem:
- Objekt "A" lebt in
QThread
"A" - Objekt "B" lebt in
QThread
"B" - Gui lebt in der „Haupt-Thread "
dann:
- Object "A" ruft eine Methode
B::foo
auf "B" Instanz, von seinem eigenen Thread "A" - die Ressourcen von dieser
B::foo
Methode geschützt sind mit einem Mutex, kein Problem hierB::foo
aus dem Thread "A" ausführen - innerhalb des
B::foo
Methode Objekt "B" emittieren das SignalbarSignal
Und ich habe einige Fragen über seine Konfiguration:
Ist es sicher, wie zu emittieren Ignorieren des Objekts "B" von einem Thread, der nicht der Eigentümer des "B" ist
QThread
?Ist es sicher,
Qt::AutoConnection
zu verwenden, um dieses Signal in einem GUI-Objekt zu empfangen, das im "Qt-Hauptthread" lebt?Ist es sicher, ein
Qt::AutoConnection
zu verwenden, um dieses Signal in einem Objekt "C" zu empfangen, das in seinem eigenenQThread
"C" lebt?
Mein Test neigt dazu, zu allem "Ja" zu sagen. Durch Lesen der Qt emit
Code scheint es in Ordnung zu sein. Aber es fand nichts in der Qt-Dokumentation über "Emitting-Signal von einem Thread, der nicht der Eigentümer Thread des Emitters ist".
Es gibt auch [ein Qt Wiki Artikel] (http://wiki.qt.io/ThreadsEventsQObjects), die ich für mehr Hintergrund lesen empfehlen. – Murphy