Seite 1 von 1
Verständnisfrage Signal und Thread
Verfasst: 18. Februar 2011 22:03
von anno1988
Hallo zusammen,
ich habe eine Verständnisfrage zu Signals und Threads.
Angenommen ich führe in einer Methode in einem Thread ein Signal aus.
Das Signal "finished()" habe ich folgender maßen mit "deleteLater()" verbunden:
Code: Alles auswählen
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
Beispiel in der Thread Klasse:
Code: Alles auswählen
void MyThread::tueIrgendWas() {
emit dasSigalAufrufen(QString wert);
this->quit();
}
Kann es dann zu Problemen kommen, wenn der Slot die Daten des Signals annimmt, der Thread aber schon gelöscht wurde oder ist das dem Slot egal?
Re: Verständnisfrage Signal und Thread
Verfasst: 19. Februar 2011 10:22
von solarix
anno1988 hat geschrieben:
Kann es dann zu Problemen kommen, wenn der Slot die Daten des Signals annimmt, der Thread aber schon gelöscht wurde oder ist das dem Slot egal?
Und wie soll in deinem Code denn diese Reihenfolge zustande kommen?
Ich hoffe ausserdem, du weisst, was du tust.. denn für den obigen Code brauchst du möglicherweise 2x "moveToThread()".. das erste damit allfällige Slots im Threadkontext ausgeführt werden ("tueIrgendWas"?), der 2. um die Threadinstanz wieder zurück zur MainLoop zu verschieben, damit "deleteLater()" in der MainLoop hinterlegt wird.
Ein weiterer Grund, warum man QThreads nicht ableiten sollte. Diese Methode
http://labs.qt.nokia.com/2006/12/04/thr ... e-headache ist besser..
Verfasst: 19. Februar 2011 12:10
von anno1988
ok danke, erde ich beachten.
aber da steht noch ein Kommentar
http://labs.qt.nokia.com/2006/12/04/thr ... /#comments
Laut Kommentar kann man nur 1:1 Relationen aufbauen, aber wie bekommt man denn da eine n:m Relation hin?
Verfasst: 19. Februar 2011 12:19
von solarix
Hab ich auch schon gelesen, aber der Kommentar macht IMHO keinen Sinn.. denn
1. gibt es bezüglich Art und Anzahl Connections in der vorgestellten Variante keinen Unterschied zur QThread-Ableitung und
2. kann ein Qt-Signal beliebig viele Empfänger haben.. ich verstehe daher nicht so ganz, welchen Anwendungsfall man damit nicht abdecken könnte..
Verfasst: 19. Februar 2011 13:14
von padreigh
dieses Concrete Beispiel : Producer->Consumer ist nur 1:1 .. vermute ich mal ist gemeint.