gpt4 book ai didi

qt - 启动连接后将 QTcpSocket 移动到新线程

转载 作者:行者123 更新时间:2023-12-03 17:28:50 25 4
gpt4 key购买 nike

我有一个线程服务器。

QTcpSocket 需要在需要运行的线程上创建,FI: Qt - Handle QTcpSocket in a new thread通过传递套接字描述符。

我的问题是,我需要有一个线程池,并在客户端发送了一个特定的 token 之后将套接字移动到一个特定的线程上,该 token 定义了套接字需要在哪个线程上。

换句话说,我需要先读取套接字以了解将其放置在哪个线程上。

一些想法是首先绑定(bind)到QTcpSocket,读取,然后将描述符发送到线程并创建另一个QTcpSocket,但文档说:

Note: It is not possible to initialize two abstract sockets with the same native socket descriptor.



另一种解决方案是在一个单独的线程中创建套接字,然后将两个线程连接在一起,尽管我不知道这是否可能。

或者也许能够在子线程上调用 setSocketDescriptor 之前读取主线程上的套接字描述符,如果这可能的话?

最佳答案

您可以绝对轻松地跨 QThreads 移动套接字,只需注意四件事:

1)确保您的 QTcpSocket 在您移动之前没有父级

2)在移动之前断开所有与套接字对象的连接

3)将您需要的任何东西连接回在目标线程中运行的函数中(您可以在线程中使用某种池,在线程拾取它们之前存储那些“移动”的对象

4) 在 init 之后调用 readAll() 因为你可能会错过一些 readyRead() 信号

如果符合设计,没有理由不这样做,至少我多次将它用于多线程服务以跨内核拆分套接字处理程序。

关于qt - 启动连接后将 QTcpSocket 移动到新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38217728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com