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

Threads & Processus C++ Discussion :

Comment transmettre des paramètres à un thread?


Sujet :

Threads & Processus C++

  1. #1
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut Comment transmettre des paramètres à un thread?
    Salut!

    Je voudrais créer 10 thread en paralleles.

    Ils sont tous issus d'une meme fonction "scan" et se différencient seulement par une variable:"base".

    Voila comment je les lancent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0;i<10;i++){
     
                              parametre->base=i;
                              liste_thread[i] = CreateThread ( NULL, NULL, scan, (LPVOID) parametre, 0, &dwThreadId ) ;
        }
    Mais dans la fonction "scan" je n'arrive pas à récupérer ce parametre "base" car je ne sais pas l'extraire de ma structure de parametre qui est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct tagTHREAD_PARAMS
    {
       int base;
     
    } THREAD_PARAMS, *LPTHREAD_PARAMS;
    Voila le début de la fonction "scan" où je voudrais récupérer le parametre "base"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DWORD WINAPI scan(LPVOID IpvThreadParam){
     
         int flag;
     
         for(int i=IpvThreadParam->base;i<100;i+=10){
    mais l'écriture:n'est pas valide!

    Comment se sert t'on de l'objet "IpvThreadParam" pour en extraire le parametre "base"?

    Merci d'avance pour toutes vos contributions!

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Suffit de lui redonner le bon type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DWORD WINAPI scan(LPVOID IpvThreadParam)
    {
         LPTHREAD_PARAMS ThreadParams = reinterpret_cast<LPTHREAD_PARAMS>(IpvThreadParams);
     
         int flag;
     
         for (int i=ThreadParam->base;i<100;i+=10)
        {
     
        // ...
    }

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Merci pour la vitesse et l'efficacité!

    Ca compile!

    Reste plus qu'a tester!

    Encore merci!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Loulou24: De void * à qch, je crois qu'un static_cast suffit.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Médinoc
    Loulou24: De void * à qch, je crois qu'un static_cast suffit.
    Oui, mais je trouve que c'est plus "parlant" avec reinterpret_cast

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/07/2006, 18h13
  2. Comment passer des paramètre a OpenRecordset
    Par molarisapa dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2006, 17h14
  3. [JSF et JSP] Transmettre des paramétre via <jsp:include
    Par Shivan dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 27/02/2006, 11h37
  4. Réponses: 2
    Dernier message: 02/02/2006, 18h46
  5. Réponses: 7
    Dernier message: 30/12/2004, 12h01

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