Пишу службу, которая будет слушать порт, принимать подключения и считывать передаваемые данные. Но возникла проблема. Клиент подключается без проблем, эмитится сигнал что есть данные. В слоте следую двумя путями:
1. (первоначальный) Начинаю вычитывать и писать все куда надо.
2. (текущий) Помещаю через run в QThreadPool, для многопоточной обработки.
НО в обоих случаях непонятное поведение (в документации не нашел объяснения). После выхода из слота сокет закрывается, как результат при первом пути не все данные считываются, при втором в поток попадает уже закрытый сокет, а так как при дисконекте самоуничтожение, то и удаленный объект.
Что делаю не так?
Ну и собственно код:
C++ (Qt)
typedef QPointer<QTcpSocket> QTcpSocketPtr;
void Server::incomingConnection( int socketDescriptor )
{
QTcpSocket * socket = new QTcpSocket();
socket->setSocketDescriptor(socketDescriptor);
qDebug() << "New connection #" << socketDescriptor;
connect(socket, SIGNAL(readyRead()),
this, SLOT(readyRead()));
connect(socket, SIGNAL(readyRead()),
socket, SLOT(deleteLater()));
}
void Server::readyRead()
{
QTcpSocket * socket = qobject_cast<QTcpSocket *>(sender());
QTcpSocketPtr * socket_ptr = new QTcpSocketPtr(socket) ;
QtConcurrent::run(&Server::serviceConnection, socket_ptr, this);
}
void Server::serviceConnection( QTcpSocketPtr * socketPtr, Server* th )
{
QTcpSocket * socket = socketPtr->data();
/*
...
*/
}