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