0

我有一个简单的多线程应用程序,其工作方式类似于 Qt 网站上的示例 “Threaded Fortune Server Example”

当我的QTCPServer接收到传入连接时,我创建一个QRunnable任务,传递socketDescriptor然后将其提交给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;
    } 
...
}

但是,我 从 Qt Doc中阅读了关于QTCPServer的incomingConnection方法的那些注释

注意:如果在重新实现此方法时创建了另一个套接字,则需要通过调用 addPendingConnection() 将其添加到 Pending Connections 机制中。

注意:如果您想在另一个线程中将传入连接作为新的 QTcpSocket 对象处理,您必须将 socketDescriptor 传递给另一个线程并在那里创建 QTcpSocket 对象并使用其 setSocketDescriptor() 方法。

所以,我的问题是:

  • 如何将另一个线程创建的套接字添加到服务器的挂起连接?
  • 这是一个必要的操作吗?

谢谢,

4

0 回答 0