标题:Qt两个线程共用一个QTcpSocket
作者:岭南小菜
日期:2019-12-17 19:31
内容:
如题,想在两个线程中共用一个QTcpSocket对象,其中一个线程进行数据的发送,另一个线程进行数据的接受。实验了很久,都没有成功,而且实验的结果是只能使用一个功能,即要是使用发送,要么能接收。
#1 [liulin188 12-17 20:29]
同一个socket句柄,2个线程用绝对是可以的,做好同步就行了!!!
同一个进程没试过,linux下好像可以
#2 [20091001753 12-17 22:12]
你的问题本质上属于“多线程通讯”,而非 QTcpSocket
#3 [圣域天子 12-17 22:53]
reentrant 跟两个线程操作有什么关系?
撇开Qt,单用socket句柄在多线程下操作,绝对是没有问题的。
但是QTcpSocket自身是不支持的,至少我以前的经验也是失败的。
#4 [fsu0413 12-21 15:08]
首先,QTcpSocket在设计上是使用Qt的消息循环来做的,而非阻塞
其次,QTcpSocket是继承QObject的,而这个玩意需要绑定线程
还有,Qt的信号和信号槽可以跨线程的
所以我认为(可能不一定正确)做法应该是:把QTcpSocket移动到接收的线程,connect接收的信号槽,然后接收的线程使用QThread::exec()进入消息循环,发送的线程直接调用QTcpSocket的发送函数(会不会导致QTcpSocket变成临界资源我就不清楚了)