Ich versuche, Timer in der Arbeiterklasse zu verwenden. Dies ist meine Arbeiter Klasse:Timer in Thread-Arbeiter Qt
Worker.h
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr);
signals:
void finished(void);
public slots:
void process(void);
void test(void);
private:
QMutex m_mutex;
};
Worker.cpp
void Worker::process(void)
{
qDebug() << "worker process"; //This works
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(test()));
forever
{
}
}
void Worker::test(void)
{
qDebug() << "test123"; //This does not work
}
ich diese Arbeiter Klasse in neuen Thread starten:
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(process()), Qt::QueuedConnection);
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
QObject::connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
thread->start();
Das Problem ist das timer
von Worker::process
funktioniert nicht. Muss ich diesen Timer im neuen Thread auf besondere Weise initialisieren?
Timer gestartet wird nicht, rufen Sie() -Methode des Timer starten. Dokumentation sagt "Um es zu verwenden, erstellen Sie einen QTimer, verbinden Sie sein timeout() Signal mit den passenden Steckplätzen, und rufen Sie start() auf." Sehen Sie sich http://doc.qt.io/qt-5/qtimer.html an – sddk
Was macht 'forever {...}' eigentlich? Ich hoffe, dass es ab und zu Ereignisse verarbeitet. –