• 2426阅读
  • 4回复

[讨论]Qt两个线程共用一个QTcpSocket [复制链接]

上一主题 下一主题
离线岭南小菜
 

只看楼主 倒序阅读 楼主  发表于: 2019-12-17
如题,想在两个线程中共用一个QTcpSocket对象,其中一个线程进行数据的发送,另一个线程进行数据的接受。实验了很久,都没有成功,而且实验的结果是只能使用一个功能,即要是使用发送,要么能接收。
离线liulin188

只看该作者 1楼 发表于: 2019-12-17
同一个socket句柄,2个线程用绝对是可以的,做好同步就行了!!!
同一个进程没试过,linux下好像可以
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线20091001753

只看该作者 2楼 发表于: 2019-12-17
你的问题本质上属于“多线程通讯”,而非 QTcpSocket
(づ ̄ 3 ̄)づ
离线圣域天子

只看该作者 3楼 发表于: 2019-12-17
reentrant 跟两个线程操作有什么关系?

撇开Qt,单用socket句柄在多线程下操作,绝对是没有问题的。
但是QTcpSocket自身是不支持的,至少我以前的经验也是失败的。
在线fsu0413

只看该作者 4楼 发表于: 2019-12-21
首先,QTcpSocket在设计上是使用Qt的消息循环来做的,而非阻塞
其次,QTcpSocket是继承QObject的,而这个玩意需要绑定线程
还有,Qt的信号和信号槽可以跨线程的

所以我认为(可能不一定正确)做法应该是:把QTcpSocket移动到接收的线程,connect接收的信号槽,然后接收的线程使用QThread::exec()进入消息循环,发送的线程直接调用QTcpSocket的发送函数(会不会导致QTcpSocket变成临界资源我就不清楚了)
快速回复
限100 字节
 
上一个 下一个