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

POSIX C Discussion :

Probleme de passage d'arguments dans un thread [Débutant(e)]


Sujet :

POSIX C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Probleme de passage d'arguments dans un thread
    Bonjour,
    J'essaye de créer des threads dans mon application.
    Voici des extraits de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /* --
      Structure des parametres que reçoit un thread
    -- */
    typedef struct
    {      char *fichier;
    	char c;
    	char v;
    } paramsThread;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* --
      Routine du thread
    -- */
    void *ecriture(void *p)
    {
    	paramsThread params = p;
    	printf("Contenu de la variable: %s",params.fichier); //TEST QUI NE MARCHE PAS
            //.....
    }
    Lancement du thread [extrait de code]
    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
     
    	paramsThread arguments;
            int nb_threads = 4;
    	pthread_t threads[5]; // on prevoit de créer jusqu'a 5 threads
    	int erreur;
            int *resultat;
     
    	// on mémorise dans la structure du thread ces 2 valeurs:
     
    //proviennent d'un autre endroit du programme
    		arguments.c = champ;	
    		arguments.v = valeur;
     
    		for(n=1; n<=nb_threads; n++) // on créer les X threads
    		{
    			fichier = argv[n];
    			arguments.fichier = argv[i+n];
     
                            erreur = pthread_create (&threads[n], NULL, ecriture, &arguments);
                            if (erreur != 0) fprintf(stderr,"Echec creation de thread: %d\n",erreur);
                            pthread_join (threads[n], (void **)&resultat);
                            printf ("Resultat: %d\n", *resultat);
                            free (resultat);
                    }
    Le problème est que je n'arrive pas à retrouver mes variables champ, valeur et fichier... savez-vous pourquoi ?

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Et si tu passes par un pointeur dans ta routine du thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paramsThread * params = p;
    ?

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faudrait un code complet minimal et compilable qui expose le problème. Sinon ce sera trop difficile de comprendre le problème.

    Par exemple, tu utilises une variable i qui sort de nul part. Comment veux-tu qu'on comprenne ce qui ne va pas ?

    Jc

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par TheBAT
    J'essaye de créer des threads dans mon application.
    Voici des extraits de code:
    <...>Le problème est que je n'arrive pas à retrouver mes variables champ, valeur et fichier... savez-vous pourquoi ?
    http://emmanuel-delahaye.developpez.com/pthreads.htm
    et surtout
    http://emmanuel-delahaye.developpez....ds.htm#donnees

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci pour les liens

Discussions similaires

  1. Probleme de passage d'argument
    Par dr971 dans le forum C++
    Réponses: 3
    Dernier message: 05/04/2007, 20h25
  2. Gros probleme de passage d'argument
    Par clemsye dans le forum Ogre
    Réponses: 3
    Dernier message: 06/01/2007, 12h00
  3. Passage de paramètres dans un thread
    Par innosang dans le forum POSIX
    Réponses: 1
    Dernier message: 04/01/2007, 15h13
  4. Probleme de passage d'arguments
    Par izorus dans le forum C++
    Réponses: 10
    Dernier message: 20/06/2006, 10h32
  5. 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

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