Lancer un Thread en Boucle [C++/Qt]

Bonjour, ^^
j'ai un soucis et j'arrive pas a exécuter un Thread en Boucle ( C++ / Qt )
voici un petit code :

//Includes... 
main.cpp 
------------ 
int main(int argc, char *argv[]) 
{ 

    Thread *myThread = new Thread; 
    myThread->start(QThread::HighPriority); 

//...... 

} 

class Thread : public QThread 
{ 
    public: 
        Thread() 
        { 
            i=0; 
        } 

        void run() 
        { 
            qDebug()<<"Th:1>>> "<<i; 
            i++;   
        } 

    private: 
        int i; 
};


Si je mets un For dans la fonction run, je pourrais plus controler le thread, étant qu'il ne se terminera guerre......
        void run() 
        { 
for(/*....*/) 
{ 
            qDebug()<<"Th:1>>> "<<i; 
            i++;   
} 
        } 


Merci de m'éclaircir sur ce point....

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,
    Déjà, déclare la macro Q_OBJECT dans ta classe Thread.

    Ensuite, il faut que tu lance sa boucle evennementielle, avec la méthode exec() il me semble.

    Et dans ton main t'attend que le signal terminated() du thread soit émis.
    1. Donc, sa sera de ce cas..
      class Thread : public QThread
      {
          Q_OBJECT
      
          public:
              Thread()
              {
                  i=0;
              }
              void run()
              {
                  qDebug()<<"Th:1>>> "<<i;
                  i++;
                  exec();
              }
          private:
              int i;
      };
      


      et pour la dernière ??
      >> Et dans ton main t'attend que le signal terminated() du thread soit émis. <<
    2. mmmh tu n'a pas de classe principale ?
    3. nn, j'ai pas crée, c'était un simple code de test ......
      j'ai tout mit dans le main
  2. Oui il est nécessaire d'avoir une boucle principale.
    D'autre part, il faut comprendre que Qt a besoin d'une initialisation (et d'une finalisation) de son environnement avant d'utiliser une quelconque classe.
    Généralement on déclare une unique instance de 'QApplication' mais, si tu ne fais pas appel à 'GUI', tu peux utiliser une instance de 'QCoreApplication'.
    Voir la doc de Qt pour de plus amples précisions.
    Bonne continuation.
    1. Merci de ta réponse, je vais m'approfondir plus a propos de ce que vous m'avais dit, et si je trouve des soucis, je viens re-poster sinon, je mettrais en RESOLU ....^^
      Bonne journée a vous tous