QT中使用另外的线程运行定时器
2013-02-24 21:01
387 查看
编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类,然后重载run并执行任务逻辑,那下面就介绍一个不用从QThread派生并使用QTimer的例子。
在类定义public中添加
在private slot中添加
构造函数中添加:
在类定义public中添加
QThread* _TimerThread; QTimer* _WriteTimer; void WriteTimestop();
在private slot中添加
void _onWriteTimeout();
构造函数中添加:
// 使用一个线程,跑定时器 _TimerThread = new QThread; _WriteTimer = new QTimer; _WriteTimer->setSingleShot(true); // 在moveToThread前先启动定时器,不然不在一个线程里,直接调用start会失败 _WriteTimer->start(2000); _WriteTimer->moveToThread(_TimerThread); // 定时器对象和this不在一个线程里面,因此这边指定了连接方式为Qt::DirectConnection,由定时器所在线程直接触发_onVoiceTimeout connect(_WriteTimer, SIGNAL(timeout()), this, SLOT(_onWriteTimeout()), Qt::DirectConnection); // 连接定时器槽,用来停止定时器 connect(this, SIGNAL(WriteTimestop()), _WriteTimer, SLOT(stop())); _TimerThread->start(); 在析构函数中添加
emit WriteTimestop(); _TimerThread->quit(); _TimerThread->wait(); delete _WriteTimer; delete _TimerThread;
相关文章推荐
- QT中使用另外的线程运行定时器(不用新建QThread子类)
- QT中使用另外的线程运行定时器
- iOS使用定时器,并添加到子线程运行
- 关于Qt中使用线程的时候函数具体在哪个线程中运行的问题
- 使用Qt中的工作线程,模拟上传文件(需要用到定时器,线程知识)
- java中使用线程实现Timer(定时器)原理和源码
- QT中使用定时器来截图
- (3)qt信号与槽的使用(以运行界面为例)
- 如何让 Qt 的程序使用 Sleep(主线程没有Sleep函数,但线程可用自带的保护函数Sleep)
- Windows XP 下使用命令行编译、运行 QT4 程序
- java中使用线程实现Timer(定时器)原理和源码
- QT---线程与定时器
- 在子线程中使用定时器,将定时器添加到RunLoop中
- (转载)Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
- 【Qt】项目搬移到另外一台电脑无法打开/运行解决办法
- Qt中使用线程时的注意事项(线程没起作用的原因)
- Qt线程和定时器
- Qt线程的简单使用——通过一个实例理解QMutex的使用
- java中使用线程实现Timer(定时器)原理和源码
- (3)qt信号与槽的使用(以运行界面为例)