QT用线程启动定时器
admin
2023-08-03 08:00:06
0

    编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类,然后重载run并执行任务逻辑,那下面就介绍一个不用从QThread派生并使用QTimer的例子。

主窗口类头文件加入:


[cpp] view plain copy

  1. QThread* _voiceThread;  

  2. QTimer* _voiceTimer;  


构造函数加入:



[cpp] view plain copy

  1. // 使用一个线程,跑定时器  

  2. _voiceThread = new QThread;  

  3. _voiceTimer = new QTimer;  

  4. _voiceTimer->setSingleShot(true);  

  5. // 在moveToThread前先启动定时器,不然不在一个线程里,直接调用start会失败  

  6. _voiceTimer->start(200);  

  7. _voiceTimer->moveToThread(_voiceThread);  

  8. // 定时器对象和this不在一个线程里面,因此这边指定了连接方式为Qt::DirectConnection,由定时器所在线程直接触发_onVoiceTimeout  

  9. connect(_voiceTimer, SIGNAL(timeout()), this, SLOT(_onVoiceTimeout()), Qt::DirectConnection);  

  10. // 连接定时器槽,用来停止定时器  

  11. connect(this, SIGNAL(stop()), _voiceTimer, SLOT(stop()));  

  12. _voiceThread->start();  


析构函数加入:



[cpp] view plain copy

  1. emit stop();  

  2. _voiceThread->quit();  

  3. _voiceThread->wait();  

  4.   

  5. delete _voiceTimer;  

  6. delete _voiceThread;  


定时器槽:



[cpp] view plain copy

  1. void Test::_onVoiceTimeout()  

  2. {  

  3.     // 执行任务  

  4.     // ...  

  5.     _voiceTimer->start(1000);  

  6. }  


相关内容

热门资讯

南京、苏州、常州倡议:非必要不... 南京、苏州昨晚,今年第9号台风“巴威”(台风级)的中心在浙江台州玉环坎门登陆。受其影响南京已出现大风...
学AI大模型应用开发必备的6个... 工欲善其事,必先利其器。这篇文章整理了一份AI大模型应用开发的学习工具清单,覆盖编程、框架、部署等环...
大湾区航天动力试验 基础设施再... 南方日报讯 7月10日,江门市新会区与临界航天(北京)智能科技有限公司签订火箭动力系统实验基地项目战...
台风“巴威”成陆上巨型洒水车,... 一夜过去,已经登陆上岸的台风“巴威”强度虽减弱为强热带风暴,但环流结构保持完整,体型依旧庞大。“巴威...
励威通讯申请光纤制造用熔融拉锥... 国家知识产权局信息显示,江西励威通讯技术有限公司申请一项名为“一种光纤制造用熔融拉锥机”的专利,公开...
电饭煲触摸键开关失灵修复小技巧 可能是触摸板里有灰尘,导致电饭煲触摸键失灵或者是损坏。解决方法:可以先把电饭煲的电线和电源断开,然后...
油烟机清洗后噪音大怎么回事 1、可能是由于在清洗之后安装不牢固,没有将螺丝固定好就会出现这种问题。2、还有的是因为在清洗过后止逆...
抽油烟机风机开关故障 抽油烟机风机开关故障对于厨房的家庭来说是一样非常棘手的问题,一方面是因为厨房食用油烟较多,长期使用油...
抽油烟机开关自动开怎么办 抽油烟机是我们家居生活中必不可少的电器,但是如果遇到抽油烟机自动开的情况,既浪费了能源,也会造成极大...
新抽油烟机开关没用怎么办 如果新安装的抽油烟机开关没有反应,可能是以下几个原因: 1.电源线没有连接正确。检查一下电源线是否...