Когда я повторно реализую QTcpserver::incomingConnection(), создается новый QThread и новый QTcpsocket. accept-fd передается в QTcpsocket. Однако предупреждение возникает, когда весь процесс неожиданно завершается: QThread: уничтожен, пока поток все еще выполняется, так как Qthread вызывает quit(), и два объекта будут удалены. Вот код ниже.
void TcpServer::incomingConnection(qintptr handle)
{
QThread* tcpThread = new QThread;
TcpSocket* tcpSocket = new TcpSocket;
tcpSocket->setSocketDescriptor(handle);
tcpSocket->moveToThread(tcpThread);
connect(tcpSocket,&TcpSocket::sigRecvFinish, [=](){
tcpThread->quit();
delete tcpSocket;
delete tcpThread;
});
tcpThread->start();
}
Как я могу выйти из потока и правильно освободить ресурсы? Между тем, что вызывает эту проблему? Буду признателен, если вы поможете мне с этим вопросом.
deleteLater
— это слот, поэтому его можно соединить сQt::AutoConnection
. Таким образом, не зависит от того, какой сигнал протектора испускается, удаление будет выполняться в потоке, к которому принадлежит объект. Это единственная причина использовать здесьdeleteLater
. Я думаю, вам следует более внимательно прочитать мой ответ и прочитать связанную документацию. 25.04.2021