问题描述,把定时器放在单独线程中使用,想提高精度。
结果报错:
QObject::startTimer: Timers cannot be started from another thread。
这种报错方式,以前刚用多线程时候遇见过。知道原因,所以更疑惑,百思不得其解。
在q群问,集思广益。
1. 多线程没问题, 槽函数是在次线程运行的。
2. 通过在Worker::start函数中直接开启定时器,不报错,证明 定时器在主线程中。
3. 通过在槽函数中创建定时器,并启动,不报错。
4. 最终怀疑是因为定时器不属于Worker,所以worker移到次线程时,定时器还在主线程。将定时器父对象设为Worker,验证确实如此。
代码:
#include <QtCore>
class Worker : public QObject
{
Q_OBJECT
public:
Worker(QObject *o=0);
signals:
void start(int);
private slots:
void handleStart(int d){ timer.start(d);}
void onTimeout()
{
qDebug()<<"Worker::onTimeout get called from?: "<<QThread::currentThreadId(