I am trying to start a Timer in a worker thread's event loop, but I get this error:
QObject::startTimer: Timers can only be used with threads started with QThread
Whats wrong with this?
#include <QObject>
#include <QThread>
#include <QTimer>
class A : public QObject
{
Q_OBJECT
public:
A();
private:
QThread m_workerThread;
QTimer m_myTimer;
};
A::A()
{
this->moveToThread(&m_workerThread);
m_myTimer.moveToThread(&m_workerThread);
m_workerThread.start();
m_myTimer.start(1000);
}
Initialize your timer anywhere, but start it right when the thread is started (attach it to QThread::started signal):
class A : public QObject
{
Q_OBJECT
public:
A();
private slots:
void started();
void timeout();
private:
QThread m_workerThread;
QTimer m_myTimer;
};
A::A()
{
moveToThread(&m_workerThread);
connect(&m_workerThread, SIGNAL(started()), this, SLOT(started()));
connect(&m_myTimer, SIGNAL(timeout()), this, SLOT(timeout()));
m_myTimer.setInterval(1000);
m_myTimer.moveToThread(&m_workerThread);
m_workerThread.start();
}
void A::started()
{
timer.start();
}
void A::timeout()
{
// timer handler
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With