标题:Qt的多线程TCP通信 信号与槽 的处理
作者:kettong
日期:2016-06-08 14:24
内容:
我在写一个Qt多线程TCP通信的程序,目前卡在信号与槽的执行并不是在同一个线程中。
8620是我主线程的ID
8408是子线程的ID
我从客户端往服务端发送数据,服务端的子线程收到信号处理时,是在子线程内部,而我从服务器往客户端发送数据时,执行的发送函数是在主线程执行的
我是创建一个线程thread,跟一个继承于QTcpSocket的类ktcp,然后使用ktcp->movetoThread(thread);方式。
目前这种情况我该怎么处理?
#1 [kettong 06-08 14:31]
下面是我的项目文件,希望大家帮我参考参考。
问题解决我将源码分享大家。
谢谢
目前这种情况我该怎么处理?
#2 [kettong 06-08 15:31]
有人帮我看看吗?
#3 [kettong 06-12 09:22]
我目前用了一个方法解决了这个问题,但是不知道是不是合适的。
1、猜测原因:之前所有的继承于socket的自定义类,与TcpServer类,都是在主线程中生成的。即使再执行movetothread,该类的槽函数还是在主函数中调用;
2、解决措施:将使用了socket,server的类外面再套一层继承于QObject的类,该类的构造函数中并不初始化与通信相关的成员变量,而是在movetothread之后,将线程的started信号,与该类的一个自定义槽函数(在该槽函数中初始化与通信相关的成员变量)进行链接。这样就解决了这个问题。
目前运行起来没有别的问题。欢迎大家探讨。
谢谢指点。@feipeng1985
#4 [liushui_sky 10-18 12:09]
这样解决是对的