我有一个线程服务器。
需要在需要运行的线程上创建QTcpSocket,FI:Qt - Handle QTcpSocket in a new thread通过传递套接字描述符。
我的问题是,我需要有一个线程池,并在客户端发送了一个特定的令牌后,在特定的线程上移动套接字,该特定的令牌定义了套接字所需的线程。
换句话说,我需要读取套接字以了解预先放置它的线程。
一些想法是首先绑定到QTcpSocket,读取,然后将描述符发送到线程并创建另一个QTcpSocket,但文档说:
注意:无法使用。初始化两个抽象套接字 相同的本机套接字描述符。
另一个解决方案是在一个单独的线程中创建套接字,然后将两个线程连接在一起,但我不知道这是否可行。
或者也许能够在子线程上调用setSocketDescriptor之前读取主线程上的套接字描述符,如果可能的话?
答案 0 :(得分:1)
您可以轻松地在QThreads之间移动套接字,只需注意以下四点:
1)确保您的QTcpSocket在移动之前没有父级
2)在移动之前断开套接字对象的所有内容
3)在一个在目标线程中运行的函数中连接你需要的任何东西(你可以在一个线程中使用某种类型的池,然后在线程拾取它们之前存储那些'移动'对象
4)在init之后调用readAll(),因为你可能会错过一些readyRead()信号
如果符合设计要求,看不出任何不这样做的理由,至少我多次使用多线程服务来跨核心拆分套接字处理程序。