IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multithreading Discussion :

signaux et mutlithread [QThread]


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut signaux et mutlithread
    Bonjour,

    Je lance quatre fois le même thread en parallèle et je veux envoyer un signal depuis les thread vers le processus père.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    int main(int argc, char *argv[])
     {
         QApplication app(argc, argv);
     
      int noeuds(4);
      QStringList * ListeJob = new QStringList ();
      ListeJob << "AAA" << "BBB" << "CCC" << "DDD" << "EEE" << "FFF" << "GGG";
     
      QStringList * ListeStdOut = new QStringList ();
      QStringList * ListeStdErr = new QStringList ();
     
      QList<Thread*> threadList;
     
      //QObject::connect(&pThread, SIGNAL(compilationFinished()),this(), SLOT(showProgress()));
     
      for (int i(0) ; i < noeuds ; ++i)
      {
      	Thread * pThread = new Thread(ListeJob, ListeStdOut, ListeStdOut, i);
      	pThread->start();
      	threadList << pThread;
      }  
     
        while (threadList.count () > 0) {
          threadList[0]->wait ();
          delete threadList[0];
          threadList.removeFirst ();
       } 
       for (int i(0) ; i<ListeStdOut->size(); ++i) {
          std::cout << ListeStdOut->at(i).toStdString() << std::endl << std::endl;
       }
       delete ListeJob;
       delete ListeStdOut;
       delete ListeStdErr;
     
      return 0;
     }
      }
    Je ne vois pas où mettre le connect, le slot, et comment distinguer dans la déclaration les threads.
    Je n'ai pas besoin d'identifier le thread émetteur.

  2. #2
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    La FAQ n'aborde pas la problématique de plusieurs threads identiques.

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Qu'est-ce que cela change qu'ils soient identiques ?

    Chacun notifiera le main thread dès qu'il le voudra, ça fait justement moins de code que pour des threads différents, mais le principe est le même.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Le problème n'est pas l'émission du signal mais sa réception.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Il faut que tu fasses une classe dérivant de QObject qui va gérer la terminaison des threads. Tu lui dis combien de threads elle va devoir gérer, et tu vas connecter le signal finished à un slot que tu auras défini dans cette fameuse classe, qui s'occupera de l'effacer de la liste des threads. Elle gèrerait donc la liste des threads, leur lancement et leur terminaison.

    Quand tous les threads ont fini, tu peux continuer le reste du programme.

    Par ailleurs, à voir si QThreadPool ne te conviendrait pas (http://qt.developpez.com/doc/latest/qthreadpool/).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Signaux CTS et RTS sur dialogue port COM
    Par chourmo dans le forum Composants VCL
    Réponses: 8
    Dernier message: 22/06/2005, 11h45
  2. [signaux] contrôler une apply python
    Par jean-jacques varvenne dans le forum Général Python
    Réponses: 1
    Dernier message: 22/03/2005, 15h06
  3. [Amstrad] Signaux à gérer port E/S pour lire ROM
    Par Masterglob dans le forum Autres architectures
    Réponses: 7
    Dernier message: 12/01/2005, 12h03
  4. [INFO]Signaux Linux et Java
    Par el3gans dans le forum Général Java
    Réponses: 5
    Dernier message: 26/11/2004, 00h17
  5. [C#] Gérer les signaux genre ctrl+c?
    Par BleudeBromothymol dans le forum Windows Forms
    Réponses: 8
    Dernier message: 17/11/2004, 15h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo