最近在使用QT做开发项目,在多线程中使用了定时器QTimer类,出现定时器无法正常定时的问题,做下记录,方便自己和出现相同问题的朋友查看。
QT在QThread类中使用QTimer中需要注意一下问题:
1)QTimer的实例化需要放到run()函数中,不要放在线程构造函数中,这样创建的定时器是属于父线程的定时器;会提示"Cannot create children for a parent that is in a different thread"问题;
参考https://blog.csdn.net/lzjsqn/article/details/56287267
2)QTimer的实例化不要加this;
//不要this
timer=new QTimer();
3)在run()函数中要加入this.exec();
参考https://blog.csdn.net/huaweijian0324/article/details/80571315
做以上修改后问题解决;定时器可以正常工作;
线程run()函数代码如下:
void AudioInThread::run()
{
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(handleTimeout()));
/*
do your job here;
*/
this->exec();
}