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 :

un argument pour un thread


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut un argument pour un thread
    salut j'ai vraiemnt besion de l'aide
    le truc est que je doit fournir a un thread un argument argv[1] pour que je effectuer les traitement dessus mais je ne sai pas comment!!!!
    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
     
    void* maFonction(void*);
     
    int main()
    {
        pthread_t thread;// On crée un thread
        pthread_create (&thread, NULL, maFonction, NULL);// Permet d'exécuter le fonction maFonction en parallèle
     
        // Attend la fin tu thread créé
        pthread_join(thread, NULL);
        return 0;
    }
     
     
    void* maFonction(void*)
    {
     //je doit effectuer le traitement sur l'argument ici
    }

  2. #2
    Membre averti
    Profil pro
    Développeur C#, Python, dans la carte à puce
    Inscrit en
    Mars 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C#, Python, dans la carte à puce
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 46
    Par défaut
    Bonjour,

    Voici l'en-tête de la fonction pthread_create :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg);
    Le dernier argument, void * arg, sert à passer l'argument dans ta fonction. Pour passer plusieurs arguments, utilise un pointeur sur structure.

    Si tu dois passer en paramètre le argv[1] correspondant aux arguments du main, ton code pourrait ressembler à ça :

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
     
    void* maFonction(void*);
     
    int main(int argc, char *argv[])
    {
        pthread_t thread;// On crée un thread
     
        /* passe l'argument à pthread_create */
        pthread_create (&thread, NULL, maFonction, (void *)argv[1]);// Permet d'exécuter le fonction maFonction en parallèle
     
        // Attend la fin tu thread créé
        pthread_join(thread, NULL);
        return 0;
    }
     
     
    void* maFonction(void*)
    {
     //je doit effectuer le traitement sur l'argument ici
    }
    J'espère avoir répondu à ta question.

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par selmani300 Voir le message
    salut j'ai vraiemnt besion de l'aide
    le truc est que je doit fournir a un thread un argument argv[1] pour que je effectuer les traitement dessus mais je ne sai pas comment!!!!
    Le passage d'un paramètre à un thread est expliqué ici :

    http://emmanuel-delahaye.developpez....threads-c/#LIV
    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
    38
    39
    40
    41
    42
    43
     
    #include <stdio.h>
    #include <pthread.h>
     
    /* contexte de données */
    struct data
    {
       int count;
    };
     
    void *maFonction (void *user)
    {
       if (user != NULL)
       {
          struct data *p = user;
     
          p->count++;
       }
       return NULL;
    }
     
    int main (void)
    {
       struct data data;
     
       data.count = 1;
       printf ("count = %d\n", data.count);
     
       {
          /* On crée un thread */
          pthread_t thread;         
     
          /* Permet d'exécuter le fonction maFonction en parallèle */
          pthread_create (&thread, NULL, maFonction, &data); 
     
          /* Attend la fin du thread créé */
          pthread_join (thread, NULL);
       }
     
       printf ("count = %d\n", data.count);
     
       return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    count = 1
    count = 2
     
    Process returned 0 (0x0)   execution time : 0.034 s
    Press any key to continue.
    Si il faut récupérer un argument de la ligne de commande, c'est du C plus élémentaire. Voir la FAQ... Il faut déjà que le main() ait la forme :

    int main (int argc, char *argv[])

  4. #4
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut Merciii
    merci beaucoup et je vai essaie les deux propositions est une derniere question est c que je peu fournir un ou pelusieur parametre

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    si tu veux fournir plusieurs paramètre il faut que tu les regroupes dans une structure, et c'est l'adresse de ta structure que tu passe lors de pthread_create.

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Par défaut
    Citation Envoyé par apesle Voir le message
    si tu veux fournir plusieurs paramètre il faut que tu les regroupes dans une structure, et c'est l'adresse de ta structure que tu passe lors de pthread_create.
    ok merci beaucoups je vai tester

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par selmani300 Voir le message
    ok merci beaucoups je vai tester
    C'est l'exemple que j'ai donné. C'est la solution universelle (ici, un seul paramètre, mais tu ajoutes ce que tu veux dans la structure...)

Discussions similaires

  1. Arguments pour et contre Access ?
    Par bottura dans le forum Sondages et Débats
    Réponses: 240
    Dernier message: 23/03/2018, 23h25
  2. Librairie OO et portable pour RegExp, Thread, Sockets, etc..
    Par Swoög dans le forum Bibliothèques
    Réponses: 29
    Dernier message: 27/05/2006, 12h29
  3. Problème de passage d'argument a un thread
    Par goof_22 dans le forum SDL
    Réponses: 2
    Dernier message: 19/04/2006, 17h59
  4. Réponses: 3
    Dernier message: 23/12/2005, 14h48
  5. [Process]renvoyez un zcat en argument pour un prog java
    Par jdeboer dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 01/07/2005, 15h48

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