Seite 1 von 1
[gelöst]QThread und QEventLoop
Verfasst: 5. September 2011 15:33
von woody
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
Re: QThread und QEventLoop
Verfasst: 5. September 2011 17:38
von franzf
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

Re: QThread und QEventLoop
Verfasst: 6. September 2011 09:25
von woody
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:
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...
}
Aufruf des Threads:
danke für die hilfe
Re: QThread und QEventLoop
Verfasst: 6. September 2011 09:57
von franzf
//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...
Und genau das interessiert uns, wie das umgesetzt ist

Vllt. kannst du dein Problem ja soweit reduzieren, dass wir es nachvollziehen können (kompilierbares Minimalbeispiel).
Re: QThread und QEventLoop
Verfasst: 6. September 2011 11:36
von Christian81
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.
Re: QThread und QEventLoop
Verfasst: 9. September 2011 16:41
von woody
Danke für die Antworten.
Es hat sich erledigt, da wie Christian81 sagt, das QTcpSocket asynchron arbeitet.