Qt在线程中使用定时器
对于自定义的信号和槽的触发,已经有示例测试过了。对于定时器消息,默认是在主线程中触发,那么如何在子线程中触发呢?本位以定时器为例,介绍一下对于系统消息,如何在子线程中触发。
工具/原料
qt
visual studio
准备工作
1、新建一个类,这个类继承QThread。定义一个QTimer定时器变量,以及对应的槽函数。在构造函数中绑定定时器,并启动定时器

2、同样在mainwindow中,也定义一个QTimer定时器变量,以及对应的槽函数。还定义了一个线程变量,在构造函数中绑定定时器,并启动定时器和线程

3、运行查看结果,两个定时器打印结果显示,都是在主线程中运行

2、在两个定时器函数中添加断点,调试。发现只有主线程的定时器函数触发,子线程并没有调到定时器的槽函数中
3、查看vs的输出窗口,只打印的主函数的定时器信息,还有一句“timers cannot be started from another thread”


3、这是就需要在run函数中,增加一句exec函数了,用了启动子线程的消息循环

5、新建一个类,用来处理定时器超时函数。在子线程中新建这个类的对象

6、再次查看运行结果,这时子线程的定时器在子线程中触发
