前段时间终于把设备管理上位机完成的差不多了,用了差不多有半个月的时间了,因为对QT还不是特别的熟悉,所以中间还是摸索QT的过程。这个上位机程序用到了多线程,数据库操作,网络套接字还有一些界面操作。使用的IDE我选用的是QT CREATOR,个人觉得还是很好用的,里面集成了QT DESIGNER,QT HELP,,QT DEBUG(虽然暂时我还没用过调试器,都是使用Qdebug打印信息和QMesseageBox输出对话框来调试的),QT CREATOR编辑环境也是相当不错的,特别是自动补全功能,呵呵不用记那么多类了,还有对类和函数或对象F1可以看到帮助文档,但是有个前提就是这个类的头文件你必须声明正确,而却你的对象函数也必须写正确了,否则就看不到文档了。在编写过程也碰到了很多问题,现在就回忆一遍吧。
问题1:在多线程的编写中,我们都知道run()里面的函数对象都是在新线程中运行的,那么新线程怎么和老线程交互。
答案:编写多线程类的时候,我们把需要和主线程交互的对象放在线程类中,这样在主线程类中定义一个线程类对象,这样主线程可以访问这个线程类的对象,当然如果是直接访问,那就要这个对象是PUBLIC的了,如果不是就要通过线程类对象函数了。同时run因为是线程类的成员函数,那么他也可以访问同一个对象的成员。所以线程类对象的这个成员变量就相当于多线程的共享变量了,所以我们要互斥访问,我们可以在线程类里面定义一个锁。
问题2:窗口操作只能运行于主线程(可能原因为窗口需要QApplication的支持,而QApplication是定义在主线程中的,窗口运行在主事件循环中,而次线程