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

Windows Discussion :

Passage d'arguments à un thread


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Points : 46
    Points
    46
    Par défaut Passage d'arguments à un thread
    Bonjour,

    j'ai écrit le petit code suivant :

    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
    struct MyArgs
    {
    	int idcur;
    	int pagecur;
    };
    
    void * v_page(void *p)
    {
    	 
             struct MyArgs *args = p;
             fprintf(fp,"aaaaaaaaaaaaa\n");
             int idp = args->pagecur;
    	 fprintf(fp,"aaaaaaaaaaaaa\n");
    	 
             int id = args->idcur;
    	 fprintf(fp,"pagecur : %d\n",idp);
    	 fprintf(fp,"idcur : %d\n",id);
    }
    
    void * start_site(int id)
    {
    	struct MyArgs args;
    	int i = 0;
    	
    	args.idcur = id;
    	args.pagecur = i;
    
    	if(pthread_create(&threadss[id].thread, NULL, v_page, &args)) 
    	{ 
            	perror("pthread_create"); 
            	exit(EXIT_FAILURE); 
     	} 
    	
    	return NULL;
    }
    Ce code marche impeccablement sous linux, compilation sans erreurs et warnings et execution comme je l'attend. Sous windows (dev-cpp), aucunes erreurs à la compilation mais à l'execution j'ai le droit à un segmentation fault.

    Apparemment il n'arrive pas à acceder au champs de ma structure.

    Vu que je ne maitrise pas bien le debugger, j'ai mis des fprintf pour voir ou ca planté et voila ce que m'affiche le programme avant de planter :

    Voila je ne sais absolument pas comment résoudre ce problème.
    A noter que c'est une application GTK.

    Merci d'avance si vous avez des idées.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce code comporte une race condition : Rien n'empêche que la fonction start_site retourne avant que le nouveau thread ait le temps de lire la structure args.

    Donc, tu dois étendre, d'une façon ou d'une autre, le temps de vie de ta structure args.
    Le plus simple pour ne pas modifier ta conception, c'est ajouter un event (ou l'équivalent sous pthread) que le nouveau thread signale dès qu'il a fini de lire les paramètres.
    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.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 87
    Points : 46
    Points
    46
    Par défaut
    j'ai rajouté un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if (pthread_join(&threadss[id].thread, NULL)) 
        perror("pthread_join");
    Et ca fonctionne.
    Merci encore

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sauf que ce truc-là, ça attend que le thread soit complètement terminé.
    Ce qui rend inutile le fait de faire le traitement dans un nouveau thread...
    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.

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

Discussions similaires

  1. Passage d'argument à un thread
    Par Picolo18 dans le forum Langage
    Réponses: 6
    Dernier message: 26/11/2008, 17h34
  2. Passage d'argument à un thread
    Par crunk dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 02/08/2007, 17h12
  3. Probleme de passage d'arguments dans un thread
    Par TheBAT dans le forum POSIX
    Réponses: 4
    Dernier message: 05/02/2007, 19h58
  4. Passage d'argument à un thread avec _Beginthreadex
    Par likenoother dans le forum MFC
    Réponses: 4
    Dernier message: 13/09/2006, 10h02
  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