我有一个简单的多线程应用程序,就像Qt网站上的示例"Threaded Fortune Server Example"一样。
当我的 QTCPServer 收到传入连接时,我创建 QRunnable 任务,传递 socketDescritptor ,然后将其提交给 QThreadPool :
void Server::incomingConnection(qintptr socketDescriptor)
{
Task *task = new Task(socketDescriptor, this);
this->m_pool->start(task);
}
然后在Task方法run()
中创建套接字:
void Task::run()
{
QTcpSocket tcpSocket;
if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocket.error());
return;
}
...
}
但是,我阅读了关于 QTCPServer 的 incomingConnection 方法的说明 来自Qt Doc
注意:如果在重新实现此方法时创建了另一个套接字,则需要通过调用addPendingConnection()将其添加到Pending Connections机制。
注意:如果要将传入连接作为新的QTcpSocket处理 另一个线程中的对象你必须将socketDescriptor传递给 其他线程并在那里创建QTcpSocket对象并使用它 setSocketDescriptor()方法。
所以,我的问题是:
谢谢,