[gelöst]QThread ohne exec() - keine Signals werden ausgelöst
Verfasst: 29. Mai 2007 11:12
Meine kleine Applikation soll über TCP/IP einen Ethernet-RS232-Konverter ansprechen, was in einer "Standalone"-Demo auch sehr gut funktioniert.
Jetzt habe ich eine GUI dazu gebastelt und die Kommunikation in einen separaten Thread ausgelagert. Ich leite von QThread ab und überschreibe die run() Methode. Dort verbinde ich mich mit dem Konverter mittels
Wenn ich nun mit
den Status Abfrage, ist dieser "QAbstractSocket::ConnectingState".
Und da bleibt er auch. Das connected() Signal wird nie ausgelöst.
Folgendes habe ich schon ausprobiert, was aber nicht geholfen hat:
- Den Socket als Membervariable anlegen, statt einer lokalen Variable in run().
- Das connect()
im Konstruktor meiner abgeleiteten Threadklasse oder in run() platziert.
Da in run() ein neuer Thread erzeugt wird, habe ich auch probiert, statt dem this Pointer einen Pointer auf die Instanz des abgeleiteten Threads zu übergeben. Trotzdem kein Signal.
- Connects mit/ohne Qt::DirectConnection als fünften Parameter.
Das einzige was funktioniert ist, wenn ich in run() die Funktion exec() aufrufe.
Aber wo soll ich dann meine Programmlogik einbauen?
(Es soll alle x Sekunden ein String versendet und einer (über das readyRead() Signal) empfangen werden)
Vielleicht ist auch mein Design verbesserungswürdig.
Wenn jemand eine Idee hat, alles ist herzlich willkommen.
Jetzt habe ich eine GUI dazu gebastelt und die Kommunikation in einen separaten Thread ausgelagert. Ich leite von QThread ab und überschreibe die run() Methode. Dort verbinde ich mich mit dem Konverter mittels
Code: Alles auswählen
pTcpSocket->connectToHost("192.168.0.3", 10001);Code: Alles auswählen
QAbstractSocket::SocketState state = pTcpSocket->state();Und da bleibt er auch. Das connected() Signal wird nie ausgelöst.
Folgendes habe ich schon ausprobiert, was aber nicht geholfen hat:
- Den Socket als Membervariable anlegen, statt einer lokalen Variable in run().
- Das connect()
Code: Alles auswählen
connect( &tcpSocket, SIGNAL(connected()), this, SLOT(conEstablishedSlot()));Da in run() ein neuer Thread erzeugt wird, habe ich auch probiert, statt dem this Pointer einen Pointer auf die Instanz des abgeleiteten Threads zu übergeben. Trotzdem kein Signal.
- Connects mit/ohne Qt::DirectConnection als fünften Parameter.
Das einzige was funktioniert ist, wenn ich in run() die Funktion exec() aufrufe.
Aber wo soll ich dann meine Programmlogik einbauen?
(Es soll alle x Sekunden ein String versendet und einer (über das readyRead() Signal) empfangen werden)
Vielleicht ist auch mein Design verbesserungswürdig.
Wenn jemand eine Idee hat, alles ist herzlich willkommen.