Создал два класса FServer наследник от QTcpServer и FThread наследник от QThread. При подключении нового клиента создается отдельный поток и в него передается дескриптор подключившегося сокета.
void FServer::incomingConnection(int socketDescriptor)
{
FThread *thread = new FThread(socketDescriptor, this);
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(thread, SIGNAL(createNewSocket(QTcpSocket *)), this, SLOT(addNewSocket(QTcpSocket *)));
thread->start();
}
//Слот
void FServer::addNewSocket(QTcpSocket *socket)
{
arraySockets.push_back(socket);
socket->moveToThread(QApplication::instance()->thread());
qDebug() << "FServer -> tcpSocket" << socket->thread();
}
Код выполняющийся в отдельном потоке:
void FThread::run()
{
QTcpSocket *tcpSocket = new QTcpSocket;
if (!tcpSocket->setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocket->error());
return;
}
//Обрабатываю сокет так как мне нужно
emit createNewSocket(tcpSocket);
qDebug() << "FThread -> tcpSocket" << tcpSocket->thread();
tcpSocket->waitForDisconnected();
}
Тут ошибка:
socket->moveToThread(QApplication::instance()->thread());
Почему то не могу я перенести объект в главный поток, почему?