您的位置:首页 > 编程语言 > Qt开发

QT中使用另外的线程运行定时器

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

在类定义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;



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: