Qt在线程中使用定时器

2025-05-09 03:52:11

对于自定义的信号和槽的触发,已经有示例测试过了。对于定时器消息,默认是在主线程中触发,那么如何在子线程中触发呢?本位以定时器为例,介绍一下对于系统消息,如何在子线程中触发。

工具/原料

qt

visual studio

准备工作

1、新建一个类,这个类继承QThread。定义一个QTimer定时器变量,以及对应的槽函数。在构造函数中绑定定时器,并启动定时器

Qt在线程中使用定时器

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

Qt在线程中使用定时器

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

Qt在线程中使用定时器

2、在两个定时器函数中添加断点,调试。发现只有主线程的定时器函数触发,子线程并没有调到定时器的槽函数中

3、查看vs的输出窗口,只打印的主函数的定时器信息,还有一句“timers cannot be started from another thread”

Qt在线程中使用定时器Qt在线程中使用定时器

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

Qt在线程中使用定时器

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

Qt在线程中使用定时器

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

Qt在线程中使用定时器
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢