昨晚在做ModBus的时候遇到了两个问题,第一个是tcpsocket突然无法发送数据了,显示tcpsocket无法跨进程调用;第二个是编译时一直显示无法访问QObject的私有变量。
一、QTcpSocket无法跨进程调用的问题
当时的情况是这样的,经过两天的思考与实现之后,程序突然无法收到从RTU返回的信息了,两天前同样的收集线程程序明明可以的。找了半天到底是哪里出了问题。
最后发现问题是出在启动线程的start()函数上,之前我的所有线程都是在主线程初始化的时候就start。主进程里面有线程的对象(不是指针),线程的对象会随着主进程初始化而初始化,tcpsocket对象(不是指针)在线程初始化的时候初始化,同时通过tcp/ip连接模拟程序。这样线程初始化完成之后就立刻开始运行。
后来我写了一个按钮响应,把线程的start()给挪到按钮响应里去了,这样之后每次tcpsocket发送数据的时候就是出错,输出“tcpsocket无法跨线程调用”,于是我又把start给挪回构造函数里了,下一步准备试一下在按钮响应里面new一个线程的对象。
这个问题我觉得可能是因为主进程和线程的关系的原因?
二、无法访问QObject私有变量
这个问题其实是发生在上一个问题之前的,这个问题在之前的我看来其实是蛮无厘头的。光说可能没啥感觉,上个图先。
上图就是这次问题的三个主角,DataBlock、CollectionThread、DBManager。 需要交代的是DataBlock这个主角中的主角是一个关系户&