QT 启动新线程执行QTimer
来源:互联网 发布:二手船用雷达淘宝网 编辑:程序博客网 时间:2024/06/10 09:50
编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类,然后重载run并执行任务逻辑,那下面就介绍一个不用从QThread派生并使用QTimer的例子。
1.主窗口类头文件加入:
_voiceThread = new QThread;_voiceTimer = new QTimer;
2.构造函数加入:
_voiceThread = new QThread;_voiceTimer = new QTimer;_voiceTimer->setSingleShot(true); //定时器单次处罚/* 在moveToThread前先启动定时器,不然不在一个线程里,直接调用start会失败 */_voiceTimer->start(200);_voiceTimer->moveToThread(_voiceThread);/* 定时器对象和this不在一个线程里面,因此这边指定了连接方式为Qt::DirectConnection,由定时器所在线程直接触发_onVoiceTimeout */connect(_voiceTimer, SIGNAL(timeout()), this, SLOT(_onVoiceTimeout()), Qt::DirectConnection);/* 连接定时器槽,用来停止定时器 */connect(this, SIGNAL(stop()), _voiceTimer, SLOT(stop()));/* 启动线程 */_voiceThread->start();
3.析构函数加入:
emit stop();_voiceThread->quit();_voiceThread->wait();delete _voiceTimer;delete _voiceThread;
4.定时器槽:
void Test::_onVoiceTimeout(){ // 执行任务 // ... _voiceTimer->start(1000);}
注: 第二次启动定时器的时候,发现没有触发槽函数,,,需要重新 new + connect
0 0
- QT 启动新线程执行QTimer
- qt 启动新线程执行定时器
- Qt QTimer执行
- Qt中同一个线程里,QTimer的timeout()信号相关的槽未执行完,会发生什么?
- Qt使用QTimer实现函数的周期性执行
- Qt QTimer在线程的应用与思考
- Qt Qtimer的使用
- QT定时器QTimer
- Qt的定时器QTimer
- Qt: QTimer的使用
- QT定时器QTimer用法
- QT定时器QTimer
- QT定时器QTimer
- 【引用】QT定时器QTimer
- Qt - QTimer更新ui
- QT源码阅读 -- QTimer
- Qt 定时器QTimer
- Qt之QTimer
- CUDA 8.0 + cudnn5.1 + OpenCV3.1.0(Ubuntu14.04)
- easyUI使用技巧收集
- Qt库制作及测试
- 20170511_请说清楚什么是菱形继承
- 保存图片到本地并可以在相册中显示出来
- QT 启动新线程执行QTimer
- three.js3D学习(2)
- NumPy doc (三)
- Could not find method compile() for arguments
- Recurrent Neural Networks
- Android获得手机唯一设备ID号
- is marked as crashed and should be repaired when using LOCK TABLES
- Linux 4.1最新内核usb与hid驱动分析记录
- 本地生成七牛token