标题:QT中如何实现两个线程分别接收和发送数据?
作者:mugua001
日期:2021-09-01 23:57
内容:
最近在学习Qt时,做了一个TCPSOCKET的应用。
想实现服务端:
主线程接收数据,然后 交给 子线程处理并在子线程中回复给客户端; (收、发两条线);
结果,始终报:Cannot create children for a parent that is in a different thread;数据也能发送成功,但做为程序猿,不对对异常视而不见……但始终没找到解决办法……
有大神告诉我,将监听、接收、发送,全丢进子线程,问题来了:收发还是在同一个线程中。
我想 将收、发分在两个线程中……请问哪位实现成功了,来指点迷津,谢谢。
(我这个想法,不知道 是不是伪科学? 见网上有人 说是QTcpSocket的创建和使用要在同一个线程里……[font=-apple-syst ..
#1 [20091001753 09-02 02:07]
线程之间应该“各家自扫门前雪”,进而用 信号槽 来处理协同问题。
所以:
不应该直接在 QThread 里直接调用 QTcpSocket 的 write,因为它俩不是同一个线程。
也不应该在 B线程里,创建 属于 A线程的 QObject 的子实例(Qt 就会提示你发的这个异常)。
QThread 希望 QTcpSocket 能发送数据,就应该是把数据用信号槽的方式投递给 QTcpSocket,后者在自己的线程里发送。
#2 [yuyu414 09-02 09:56]
socket的收发应该在同一个线程,数据处理用另一个线程
#3 [hank119 09-02 12:12]
收到的数据放在缓存里面,写数据加入一队列。处理数据另起一个线程!一般都这样的吧
#4 回 yuyu414 的帖子 [mugua001 09-02 13:13]
yuyu414:socket的收发应该在同一个线程,数据处理用另一个线程 (2021-09-02 09:56)
非常感谢!
同时也感谢楼上的各位大神!
看来我之前的想法,是错误的了。
以后知道这个路线了:收、发在一个线程,处理环节可以单独一个线程;。
#5 [zhaoxg 09-03 01:11]
个人感觉,看怎么方便,一个接收数据,一个处理,完成后发送,完全可以三个线程处理各不相干,处理起来思路比较清晰