QThread in QThread erstellen
Verfasst: 23. Oktober 2007 11:45
Hallo Forumgemeinde, hier mein erstes Posting:
Ich beschäftige mich jetzt etwas mit Threads sowie mit den Client/Server Tutorials, stehe jetzt aber vor einem Problem:
Ich implementiere eine Applikation um Messungen durchzuführen welche dem Threaded Fortune Server Example ähnlich ist.
RequestListener (wartet auf Messanfragen)
RequestHandler (Schaut welche Anfrage kommt)
In der Funktion readSocket(QTcpSocket*) erstelle ich anhand des erhaltenen Befehls (im Moment verwende ich Start und Stop + eine id) einen neuen Thread (TaskHandler) im Fall des Befehls Start. Dies funktioniert auch. Übergebe zusätzlich den socketDescriptor um den Client Informationen über die aktuelle Messung zurückzuschicken.
Das Problem ist jetzt dass jetzt diesen Thread nicht mehr automatisch löschen kann sondern nur indem ich das STOP signal schicke und nicht mit deleteLater(...) sobald die Messung in der run() Methode fertig ist. Ich weiß zwar dass das mit der Event-Loop zusammenhängt und irgendwie die SIGNALS nicht ankommen, aber alle verschiedenen Übergaben eines Parents führen zur Fehlermeldung: Cannot create children for a parent that ist in a different thread.
Gibt es hierfür irgendwie eine Lösung oder handelt es sich hierbei um einen Designfehler?
Wäre für jede Hilfe dankbar.
Mit freundlichen Grüßen,
Markus Demetz
Ich beschäftige mich jetzt etwas mit Threads sowie mit den Client/Server Tutorials, stehe jetzt aber vor einem Problem:
Ich implementiere eine Applikation um Messungen durchzuführen welche dem Threaded Fortune Server Example ähnlich ist.
RequestListener (wartet auf Messanfragen)
Code: Alles auswählen
void RequestListener::incomingConnection(int socketDescriptor) {
RequestHandler *h = new RequestHandler(socketDescriptor, this);
QObject::connect(h, SIGNAL(finished()), h, SLOT(deleteLater()));
h->start();
}
RequestHandler (Schaut welche Anfrage kommt)
Code: Alles auswählen
void RequestHandler::run() {
flag = true;
socket = new QTcpSocket();;
connect(socket, SIGNAL(disconnected()), this, SLOT(lostConnection()));
if (!socket->setSocketDescriptor(socketDescriptor)) {
qDebug() << "Error: " << socket->error();
emit error(socket->error());
return;
}
while (flag) {
if (socket->waitForReadyRead(2000)) readSocket(socket);
}
}Das Problem ist jetzt dass jetzt diesen Thread nicht mehr automatisch löschen kann sondern nur indem ich das STOP signal schicke und nicht mit deleteLater(...) sobald die Messung in der run() Methode fertig ist. Ich weiß zwar dass das mit der Event-Loop zusammenhängt und irgendwie die SIGNALS nicht ankommen, aber alle verschiedenen Übergaben eines Parents führen zur Fehlermeldung: Cannot create children for a parent that ist in a different thread.
Gibt es hierfür irgendwie eine Lösung oder handelt es sich hierbei um einen Designfehler?
Wäre für jede Hilfe dankbar.
Mit freundlichen Grüßen,
Markus Demetz