Qt在线程中使用定时器

 时间:2024-10-18 05:17:13

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

工具/原料

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在线程中使用定时器
  • 如何登录PostgreSQL
  • 禁用远程登录此电脑桌面 禁止Telnet登录设置
  • SVN服务器怎么添加用户及群组
  • 如何禁用msconfig,禁止打开系统配置的方法!
  • nodejs 如何使用 cheerio 来解析 html
  • 热门搜索
    舟山旅游地图 全国旅游景点地图 日本名古屋旅游攻略 齐齐哈尔旅游景点大全 版纳旅游 四川旅游景点推荐 巴马旅游网 旅游地图高清版 山东省旅游地图 山西晋城旅游