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

时间:2016-07-06 06:43:59

标签: qt qthread qtcpsocket

我有一个线程服务器。

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

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

换句话说,我需要读取套接字以了解预先放置它的线程。

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

  

注意:无法使用。初始化两个抽象套接字   相同的本机套接字描述符。

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

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

1 个答案:

答案 0 :(得分:1)

您可以轻松地在QThreads之间移动套接字,只需注意以下四点:

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

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

3)在一个在目标线程中运行的函数中连接你需要的任何东西(你可以在一个线程中使用某种类型的池,然后在线程拾取它们之前存储那些'移动'对象

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

如果符合设计要求,看不出任何不这样做的理由,至少我多次使用多线程服务来跨核心拆分套接字处理程序。