Hallo
Ich habe einen QThread erzeugt, damit eine größere TCP-Datenübergabe die GUI nicht solange einfriert. Innerhalb der Run Methode des Threads funktioniert die Kommunikation jedoch nicht.
Der Client sendet zwar die Anfrage kommt dann aber nie mehr aus der nach dem Senden erzeugten QEventLoop raus, da der Server nichts empfängt und dadurch natürlich nichts antwortet.
Ohne seperaten QThread funktioniert alles.
Hat jemand eine Idee warum...
Danke für die Hilfe
[gelöst]QThread und QEventLoop
[gelöst]QThread und QEventLoop
Zuletzt geändert von woody am 9. September 2011 16:42, insgesamt 1-mal geändert.
Re: QThread und QEventLoop
Code Please!
Eine Beschreibung ist zwar immer ganz nett, da die Umsetzung aber sehr variieren kann, und hier recht wahrscheinlich der Hund begraben liegt, brauchen wir Fakten
Eine Beschreibung ist zwar immer ganz nett, da die Umsetzung aber sehr variieren kann, und hier recht wahrscheinlich der Hund begraben liegt, brauchen wir Fakten
Re: QThread und QEventLoop
Ich hab ein Singleton TcpInterface, dessen Instanz einmal erzeugt wird. Immer wenn es mit getInstance() geholt wird, wird das gleiche Object zurückgeliefert. Über dieses Object wird dann der QString auf das Socket geschrieben.
Jetzt habe ich eine QThread Klasse mit einer run Methode:
Aufruf des Threads:
danke für die hilfe
Jetzt habe ich eine QThread Klasse mit einer run Methode:
Code: Alles auswählen
void MyThread::run()
{
code....
code....
TcpInterface& ti = TcpInterface::getInstance();
ti.sendRequest();
//innerhalb des Sendens wir eine QEventLoop erzeugt und exec aufgerufen, die solange läuft, bis das ReadyRead Signal emitted wird, aus dieser kommt man jedoch nie mehr raus...
}
Code: Alles auswählen
MyThread thread(this);
thread.start();
thread.wait();
Re: QThread und QEventLoop
Und genau das interessiert uns, wie das umgesetzt ist//innerhalb des Sendens wir eine QEventLoop erzeugt und exec aufgerufen, die solange läuft, bis das ReadyRead Signal emitted wird, aus dieser kommt man jedoch nie mehr raus...
Vllt. kannst du dein Problem ja soweit reduzieren, dass wir es nachvollziehen können (kompilierbares Minimalbeispiel).
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: QThread und QEventLoop
QThread::wait() blockiert bis der Thread beendet ist.
Außerdem ist ein Thread nur um per TCP Daten abzufragen komplett unnötigt da QTcpSocket eh schon asynchron ist.
Außerdem ist ein Thread nur um per TCP Daten abzufragen komplett unnötigt da QTcpSocket eh schon asynchron ist.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: QThread und QEventLoop
Danke für die Antworten.
Es hat sich erledigt, da wie Christian81 sagt, das QTcpSocket asynchron arbeitet.
Es hat sich erledigt, da wie Christian81 sagt, das QTcpSocket asynchron arbeitet.