• 6510阅读
  • 6回复

[讨论]多线程共用同一个QTcpSocket对象 [复制链接]

上一主题 下一主题
离线calvin.huang
 

只看楼主 倒序阅读 楼主  发表于: 2018-08-14
现在遇到的问题,我程序上,有三条线程会用到全局变量QTcpSocket的write功能,不过编译器会提示:Socketnotifiers cannot be enabled.....(大概意思是:Sokcet无法在其他线程调用)
我QTcpSocket的全局变量是在主线程上定义的。
请教这种情况应该怎么解决。查了很久资料,没找到有多线程共用同一个Socket对象的例子。
离线汉阳青川

只看该作者 1楼 发表于: 2018-08-14
给你个策略处理这样的问题:把这三个线程要写的内容放到全局队列,Socket线程负责把全局队列发送出去
开发老司机,擅长整治各种疑难杂症,轻车熟路不翻车;需要开发定制,方案咨询,可以加——+V=+X:Sinden2022
离线never_forget

只看该作者 2楼 发表于: 2018-08-14
线程都开起来了,再加一个 socket  嘛,小气得很~
离线calvin.huang

只看该作者 3楼 发表于: 2018-08-14
回 汉阳青川 的帖子
汉阳青川:给你个策略处理这样的问题:把这三个线程要写的内容放到全局队列,Socket线程负责把全局队列发送出去 (2018-08-14 17:41) 

感谢,这思路不太适合现在我这情况,我得在其中一条线程上一直写,然后服务器会返回给我一些状态信息拿来更新的。另外两条线程上使用类似指令的作用,不能统一一起发。
离线calvin.huang

只看该作者 4楼 发表于: 2018-08-14
回 never_forget 的帖子
never_forget:线程都开起来了,再加一个 socket  嘛,小气得很~ (2018-08-14 18:13) 

感谢,这是的确可以解决,但没有些更好的方法吗
在线kaon

只看该作者 5楼 发表于: 2018-08-14
invoke?
离线lemonzll

只看该作者 6楼 发表于: 2018-08-14
多线程可以用signal和slot,你三个线程都弄个signal,关联到主线程的一个slot,要在线程中发送数据的时候触发signal,将数据传过去,在slot中使用全局对象发送。或者可以将全局变量稍微封装下,定一个发送数据的slot,然后在三个线程中要发送数据的时候用QMetaObject::invokeMethod来调用下这个slot就可以了
快速回复
限100 字节
 
上一个 下一个