[gelöst]QThread und QEventLoop

Alles rund um die Programmierung mit Qt
Antworten
woody
Beiträge: 85
Registriert: 1. April 2011 21:13

[gelöst]QThread und QEventLoop

Beitrag 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
Zuletzt geändert von woody am 9. September 2011 16:42, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QThread und QEventLoop

Beitrag 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 ;)
woody
Beiträge: 85
Registriert: 1. April 2011 21:13

Re: QThread und QEventLoop

Beitrag 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:

Code: Alles auswählen

MyThread thread(this);
thread.start();
thread.wait();
danke für die hilfe
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QThread und QEventLoop

Beitrag 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).
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QThread und QEventLoop

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
woody
Beiträge: 85
Registriert: 1. April 2011 21:13

Re: QThread und QEventLoop

Beitrag von woody »

Danke für die Antworten.
Es hat sich erledigt, da wie Christian81 sagt, das QTcpSocket asynchron arbeitet.
Antworten