QObject::startTimer: der Timer kann nur verwendet werden, mit threads gestartet mit QThread
Ich versuche zu starten einen Timer in einem worker-thread-event-Schleife, aber ich bekomme diese Fehlermeldung:
QObject::startTimer: Timers can only be used with threads started with QThread
Was ist Los mit diesem?
#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);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Denke, dass ich es herausgefunden, habe versucht zu starten, wird der timer aus dem GUI-thread, nachdem ich es verschoben, um den worker-thread, auf diese Weise scheint es zu funktionieren:
Initialisieren den timer überall, aber starten Sie es richtig, wenn der thread gestartet wird (befestigen Sie es an QThread::started signal):
Dieser Ansatz scheint ein bisschen gefährlich für mich. Durch verschieben der
QObject
auf dieQThread
, du machst den thread verantwortlich für die Objekt-Ereignisse (Signale, slots, Nachrichten, etc). Wenn das Objekt gelöscht wird, jedoch wird der thread gelöscht werden, bevor das Objekt selbst, die führen kann zu einigen unerwarteten Verhaltensweisen.Den empfohlene Vorgehensweise ist zu instanziieren der thread und das Objekt getrennt.