• 4449阅读
  • 4回复

[提问]Qt的多线程TCP通信 信号与槽 的处理 [复制链接]

上一主题 下一主题
离线kettong
 

只看楼主 倒序阅读 楼主  发表于: 2016-06-08
我在写一个Qt多线程TCP通信的程序,目前卡在信号与槽的执行并不是在同一个线程中。




8620是我主线程的ID
8408是子线程的ID
我从客户端往服务端发送数据,服务端的子线程收到信号处理时,是在子线程内部,而我从服务器往客户端发送数据时,执行的发送函数是在主线程执行的
我是创建一个线程thread,跟一个继承于QTcpSocket的类ktcp,然后使用ktcp->movetoThread(thread);方式。

目前这种情况我该怎么处理?
离线kettong

只看该作者 1楼 发表于: 2016-06-08
下面是我的项目文件,希望大家帮我参考参考。
问题解决我将源码分享大家。
谢谢

目前这种情况我该怎么处理? 项目文件 ServerHelp.rar (22 K) 下载次数:16
离线kettong

只看该作者 2楼 发表于: 2016-06-08
有人帮我看看吗?
离线kettong

只看该作者 3楼 发表于: 2016-06-12
我目前用了一个方法解决了这个问题,但是不知道是不是合适的。
1、猜测原因:之前所有的继承于socket的自定义类,与TcpServer类,都是在主线程中生成的。即使再执行movetothread,该类的槽函数还是在主函数中调用;
2、解决措施:将使用了socket,server的类外面再套一层继承于QObject的类,该类的构造函数中并不初始化与通信相关的成员变量,而是在movetothread之后,将线程的started信号,与该类的一个自定义槽函数(在该槽函数中初始化与通信相关的成员变量)进行链接。这样就解决了这个问题。

目前运行起来没有别的问题。欢迎大家探讨。

谢谢指点。@feipeng1985  
本帖提到的人: @feipeng1985
离线liushui_sky

只看该作者 4楼 发表于: 2016-10-18
这样解决是对的
快速回复
限100 字节
 
上一个 下一个