使用定时器轮询的方式,对比线程sleep的方式可以在等待过程中接收信号,并执行槽函数;
而sleep轮询的方式,线程在sleep时不能执行槽函数,而是把信号消息放入队列,唤醒后执行;
sleep的方式
void threadname::run()
{
while ( continueFlag_ )
{
QThread::msleep( 1200 );
tick();
}
}
1.类继承QT线程
class className: public QThread
{
}
2.父线程中创建和moveToThread
className *Stuff = new className();
className->moveToThread(className);
className->start(); //对应执行run函数
3.run() 函数中启动定时器
QTimer方式
void className::run()
{
execTimer= new QTimer(this);
connect(execTimer, SIGNAL(timeout()), this, SLOT(exec_timeout()), Qt::UniqueConnection);
execTimer->setInterval(50);
execTimer->start();
exec();//事件循环
}
4.exec_timeout()中 可以实现一个状态机轮询