首页| 论坛| 消息

标题:关于QTsocket多线程中跨线程发送问题
作者:wangzihan082
日期:2020-09-15 11:44
内容:

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

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


#1 [fsu0413 09-15 12:34]
在线程中再做一个类继承qobject,然后用这个类做普通的发送就行
然后这个类里自产自销一对signalslot,然后要发送的时候直接调signal
#2 [青空飞羽 09-15 13:38]
每个客户端应该需要一个唯一标识,当有客户端连接上来时,用一个map保存每一个客户端对应连接的socket。主进程UI界面中,选择客户端进行发送时,找到对应客户端连接的socket,然后往这个socket写数据
#3 回 青空飞羽 的帖子 [wangzihan082 09-15 13:54]
青空飞羽:每个客户端应该需要一个唯一标识,当有客户端连接上来时,用一个map保存每一个客户端对应连接的socket。主进程UI界面中,选择客户端进行发送时,找到对应客户端连接的socket,然后往这个socket写数据 (2020-09-15 13:38) 
谢谢,这个方法在单线程中操作没有问题,当每一个SOCKET在线程中时,就会报跨线程错误。
#4 回 wangzihan082 的帖子 [青空飞羽 09-15 15:44]
wangzihan082:谢谢,这个方法在单线程中操作没有问题,当每一个SOCKET在线程中时,就会报跨线程错误。 (2020-09-15 13:54) 
那可以用信号槽的方式,主进程UI界面中消息发送信号和每一个客户端线程对象的消息接收槽绑定,消息发送信号中带入客户端唯一标识,和发送数据,消息接收槽中根据客户端唯一标识判断是否是自己发送该条数据
#5 回 青空飞羽 的帖子 [wangzihan082 09-15 16:53]
青空飞羽:那可以用信号槽的方式,主进程UI界面中消息发送信号和每一个客户端线程对象的消息接收槽绑定,消息发送信号中带入客户端唯一标识,和发送数据,消息接收槽中根据客户端唯一标识判断是否是自己发送该条数据 (2020-09-15 15:44) 
嗯,目前正在做这方面的尝试,谢谢。

<< 1 2 >> (1/2)

回复 发表
主题 版块