Démarrer QTimer dans un QThread
Je suis en train de commencer un QTimer dans un thread spécifique. Cependant, la minuterie ne semble pas s'exécuter et rien n'est en cours d'impression. Est-il quelque chose à faire avec la minuterie, le logement ou le fil?
main.cpp
#include "MyThread.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
MyThread t;
t.start();
while(1);
}
MyThread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QTimer>
#include <QThread>
#include <iostream>
class MyThread : public QThread {
Q_OBJECT
public:
MyThread();
public slots:
void doIt();
protected:
void run();
};
#endif /* MYTHREAD_H */
MyThread.cpp
#include "MyThread.h"
using namespace std;
MyThread::MyThread() {
moveToThread(this);
}
void MyThread::run() {
QTimer* timer = new QTimer(this);
timer->setInterval(1);
timer->connect(timer, SIGNAL(timeout()), this, SLOT(doIt()));
timer->start();
}
void MyThread::doIt(){
cout << "it works";
}
source d'informationauteur Tudor Pascu
Vous devez vous connecter pour publier un commentaire.
Comme je l'ai commenté (plus d'informations dans le lien) vous faites du mal :
doIt()
). Ils doivent être séparés.QThread
dans votre cas. Pire, vous écrasez larun
méthode sans aucune considération de ce qu'elle faisait.Cette portion de code doit être assez
Maintenant (Qt version >= 4.7) par défaut
QThread
commence une boucle d'événement dans sarun()
méthode. Afin de s'exécuter dans un thread, il vous suffit de déplacer l'objet. Lire la doc...Un
QTimer
ne fonctionne que dans un thread qui a une boucle d'événements.http://qt-project.org/doc/qt-4.8/QTimer.html
Vous pouvez utiliser le émettent de signal et démarrer le minuteur à l'intérieur de l'émise logement de fonction
main.cpp
MyThread.h
MyThread.cpp
Vous avez besoin d'une boucle pour avoir compteurs. Voici comment j'ai résolu le même problème avec mon code:
Ici est la question de la documentation qu'aucun des autres affiches mentionnées:
J'ai créé un exemple qui appelle la minuterie à l'intérieur d'une fonction lambda: