• 129阅读
  • 5回复

[提问]关于QTsocket多线程中跨线程发送问题 [复制链接]

上一主题 下一主题
在线wangzihan082
 

只看楼主 倒序阅读 楼主  发表于: 09-15
由于项目需要,做了一个QT的TCP服务端,想要实现如下功能:
1、每个客户端连接时,在重写的incomingConnection函数中,为每一个客户端创建一个线程
2、每个客户端有数据发送上来时,在线程中进行分析,处理后自动返回,并通过信号通知主进程客户端信息;
3、在主进程UI界面中,选择客户端进行发送;


目前1和2都已经可以实现,第3还没有什么思路,在网上又说道用QMetaObject::invokeMethod这个方法,请教各位大神,这个方法如何使用?
除了这种方法外,还有没有其他可行的方案,谢谢
离线fsu0413

只看该作者 1楼 发表于: 09-15
在线程中再做一个类继承qobject,然后用这个类做普通的发送就行
然后这个类里自产自销一对signalslot,然后要发送的时候直接调signal
在线青空飞羽

只看该作者 2楼 发表于: 09-15
每个客户端应该需要一个唯一标识,当有客户端连接上来时,用一个map保存每一个客户端对应连接的socket。主进程UI界面中,选择客户端进行发送时,找到对应客户端连接的socket,然后往这个socket写数据
在线wangzihan082

只看该作者 3楼 发表于: 09-15
回 青空飞羽 的帖子
青空飞羽:每个客户端应该需要一个唯一标识,当有客户端连接上来时,用一个map保存每一个客户端对应连接的socket。主进程UI界面中,选择客户端进行发送时,找到对应客户端连接的socket,然后往这个socket写数据 (2020-09-15 13:38) 

谢谢,这个方法在单线程中操作没有问题,当每一个SOCKET在线程中时,就会报跨线程错误。
在线青空飞羽

只看该作者 4楼 发表于: 09-15
回 wangzihan082 的帖子
wangzihan082:谢谢,这个方法在单线程中操作没有问题,当每一个SOCKET在线程中时,就会报跨线程错误。 (2020-09-15 13:54) 

那可以用信号槽的方式,主进程UI界面中消息发送信号和每一个客户端线程对象的消息接收槽绑定,消息发送信号中带入客户端唯一标识,和发送数据,消息接收槽中根据客户端唯一标识判断是否是自己发送该条数据
在线wangzihan082

只看该作者 5楼 发表于: 09-15
回 青空飞羽 的帖子
青空飞羽:那可以用信号槽的方式,主进程UI界面中消息发送信号和每一个客户端线程对象的消息接收槽绑定,消息发送信号中带入客户端唯一标识,和发送数据,消息接收槽中根据客户端唯一标识判断是否是自己发送该条数据 (2020-09-15 15:44) 

嗯,目前正在做这方面的尝试,谢谢。
快速回复
限100 字节
 
上一个 下一个