QTcpSocket::connectToHost() blockiert die GUI!
Verfasst: 16. Dezember 2010 13:28
Hallo zusammen,
ich arbeite mit Qt 4.7.0 unter XP mit VS2008.
Ich bin dabei, ne Socket-Klasse zu entwerfen, die sich als Client auf nen Server verbindet.
Starte ich jetzt meine Client-Anwendung und versuche mich zu verbinden, der Server aber nicht läuft, dann blockiert für kurze Zeit die GUI!
Als Reconnect-Mechanismus hab ich die Signals / Slots mit einander verbunden, also sowas:
...
m_socket = new QTcpSocket();
connect(m_socket, SIGNAL(readyRead()),
this, SLOT(slotReadData()));
connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(slotError(QAbstractSocket::SocketError)));
connect(m_socket, SIGNAL(connected()),
this, SLOT(slotConnected()));
connect(m_socket, SIGNAL(disconnected()),
this, SLOT(slotDisconnected()));
...
Innerhalb von slotError() und slotDisconnected() rufe ich dann erneut m_socket::connectToHost() auf.
Aber auch selbst wenn ich den Reconnect-Mechanismus weglasse und der Server nicht läuft, blockiert kurz die GUI beim ersten und einzigen Aufruf.
Dachte QTcpSocket ist asynchron, d.h. hier wird nix mehr blockiert und alles wird mit den Signals gemacht. Ich habe auch schon Beiträge u. Bsp. gelesen, die QTcpSocket in eine QThread::run() verfrachten. Aber dann verstehe ich wohl das "asynchrone" wohl falsch und QTcpSocket ist doch blockierend.
Kann mich bitte mal einer aufklären?
Danke...
jackmack
ich arbeite mit Qt 4.7.0 unter XP mit VS2008.
Ich bin dabei, ne Socket-Klasse zu entwerfen, die sich als Client auf nen Server verbindet.
Starte ich jetzt meine Client-Anwendung und versuche mich zu verbinden, der Server aber nicht läuft, dann blockiert für kurze Zeit die GUI!
Als Reconnect-Mechanismus hab ich die Signals / Slots mit einander verbunden, also sowas:
...
m_socket = new QTcpSocket();
connect(m_socket, SIGNAL(readyRead()),
this, SLOT(slotReadData()));
connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(slotError(QAbstractSocket::SocketError)));
connect(m_socket, SIGNAL(connected()),
this, SLOT(slotConnected()));
connect(m_socket, SIGNAL(disconnected()),
this, SLOT(slotDisconnected()));
...
Innerhalb von slotError() und slotDisconnected() rufe ich dann erneut m_socket::connectToHost() auf.
Aber auch selbst wenn ich den Reconnect-Mechanismus weglasse und der Server nicht läuft, blockiert kurz die GUI beim ersten und einzigen Aufruf.
Dachte QTcpSocket ist asynchron, d.h. hier wird nix mehr blockiert und alles wird mit den Signals gemacht. Ich habe auch schon Beiträge u. Bsp. gelesen, die QTcpSocket in eine QThread::run() verfrachten. Aber dann verstehe ich wohl das "asynchrone" wohl falsch und QTcpSocket ist doch blockierend.
Kann mich bitte mal einer aufklären?
Danke...
jackmack