connect跨进程 qt_QtNote:QTcpSocket与QThread,QObject的拷贝问题

本文讲述了在Qt开发中遇到的两个问题:QTcpSocket无法跨进程调用和无法访问QObject私有变量。解决方法包括理解线程与进程的关系以调整线程启动时机,以及避免对QObject进行拷贝操作。同时,文章还提到在非QObject子类中使用connect函数的解决方案。
摘要由CSDN通过智能技术生成

昨晚在做ModBus的时候遇到了两个问题,第一个是tcpsocket突然无法发送数据了,显示tcpsocket无法跨进程调用;第二个是编译时一直显示无法访问QObject的私有变量。

一、QTcpSocket无法跨进程调用的问题

当时的情况是这样的,经过两天的思考与实现之后,程序突然无法收到从RTU返回的信息了,两天前同样的收集线程程序明明可以的。找了半天到底是哪里出了问题。

最后发现问题是出在启动线程的start()函数上,之前我的所有线程都是在主线程初始化的时候就start。主进程里面有线程的对象(不是指针),线程的对象会随着主进程初始化而初始化,tcpsocket对象(不是指针)在线程初始化的时候初始化,同时通过tcp/ip连接模拟程序。这样线程初始化完成之后就立刻开始运行。

后来我写了一个按钮响应,把线程的start()给挪到按钮响应里去了,这样之后每次tcpsocket发送数据的时候就是出错,输出“tcpsocket无法跨线程调用”,于是我又把start给挪回构造函数里了,下一步准备试一下在按钮响应里面new一个线程的对象。

这个问题我觉得可能是因为主进程和线程的关系的原因?

二、无法访问QObject私有变量

这个问题其实是发生在上一个问题之前的,这个问题在之前的我看来其实是蛮无厘头的。光说可能没啥感觉,上个图先。

qobjectclass.png

上图就是这次问题的三个主角,DataBlock、CollectionThread、DBManager。 需要交代的是DataBlock这个主角中的主角是一个关系户&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值