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

C++ Discussion :

[MT] Lancement de Threads


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut [MT] Lancement de Threads
    Bonjour, j'ai un problème sans doute pas compliqué à résoudre mais sur lequel je cale depuis un moment.

    Dans mon main, je souhaite lancer plusieurs threads d'une classe de la façon suivante :

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    for(i=0;i<nb_elem;i++)
     {
        if (fee[i]->GetType()=="File_feeder")
    	 {
    	  DWORD ThreadID;
     	  CreateThread (NULL , NULL, File_feeder::Thread_File,(LPVOID) fee[i]  ,NULL,&ThreadID);
    	 } 
     }
    avec ma thread déclarée de la façon suivante dans ma classe:
    file_feeder.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class File_feeder : public Feeder
    {
       public:
                ...
                DWORD WINAPI Thread_File(LPVOID lpParam)
                  {
                    /*code*/
                    return 0;
                  }
     }
    Hélas, j'ai une erreur sur le CreateThread que je n'arrive pas à résoudre meme en forcant le param 3 en mettant (LPTHREAD_START_ROUTINE) devant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2664: 'CreateThread' : impossible de convertir le paramètre 3 de 'DWORD (__stdcall File_feeder::* )(LPVOID)' en 'LPTHREAD_START_ROUTINE'
    et je ne réussi pas à la résoudre Si un connaisseur en threads a une piste, il est le bienvenu

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Autant pour moi,

    en mettant static devant la déclaration du thread dans la classe, ça résout le problème.

    Désolé du dérangement !

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Rappel: Utiliser _beginthreadex() plutôt que CreateThread(), sauf dans des programmes faits spécialement pour ne pas utiliser la C/C++ Run-Time Library (et ces programmes sont l'exception, pas la règle).

    De plus, le cast en LPVOID est inutile: Tous les pointeurs sont implicitement convertibles en void*, sauf les const void * (utiliser un const_cast<> dans ce cas) et les pointeurs de fonction.

    PS: La valeur de retour de CreateThread() et _beginthreadex() est un HANDLE, qui doit absolument être fermé avec CloseHandle() avant d'etre "oublié"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Merci pour l'info !!

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

Discussions similaires

  1. Parcours de tableau et lancement de threads
    Par hotman1313 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/02/2015, 09h36
  2. Lancement de thread successifs
    Par Anduriel dans le forum Général Java
    Réponses: 2
    Dernier message: 26/01/2014, 01h52
  3. Lancement de thread
    Par noOneIsInnocent dans le forum C#
    Réponses: 2
    Dernier message: 25/04/2013, 18h41
  4. [XNA] Lancement de threads
    Par Chen norris dans le forum XNA/Monogame
    Réponses: 6
    Dernier message: 05/07/2010, 13h35
  5. Réponses: 6
    Dernier message: 03/03/2004, 14h31

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