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 :

Ordre de thread


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Ordre de thread
    Bonjour ,

    J'ai 3 thread a executer

    Un thread envoie
    un thread reception
    un thread reception2

    Les 3 sont liés a des fonctions qui ont des boucles infinis
    Lorsque l'on envoie , on a reception ensuite , puis si on a reception on a reception 2 et tout ça à l'infini .

    Cependant , je n'arrive pas à faire cela .

    J'ai fais un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    pthread_create(&envoi, NULL, thread_envoi,(void*)NULL);
    pthread_join(envoi,NULL);  //  On attend que envoi finit      
     
     pthread_create(&reception, NULL, thread_reception,(void*)NULL);
    pthread_join(reception,NULL);  // on attend qu'il finisse 
     
    pthread_create(&reception2,NULL,thread_reception2,(void*)NULL);
    pthread_join(reception2,NULL);  // on attend qu'il finisse
    J'espère que vous sauriez m'aider

    Edit : Apparement , vu que ce sont des boucles infinis , cela bloque des l'attente du thread envoi .

    Edit2 : J'ai pensé à enlever les pthread_join() : Cependant , les trois threads s'exécutent directement et le programme se finit .

    Y a t il une solution contre ça ?
    Dernière modification par Invité ; 10/05/2013 à 15h58.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Ce que tu dois comprendre, c'est que lorsque tu travailles avec de threads, il ne travaillent pas l'un après l'autre, mais en même temps.

    Tu peux très bien avoir un envoi qui est effectué en meme temps que la réception2 (sans doute d'une chose pour laquelle l'envoi a été fait avant ), ainsi que toutes les autres combinaisons possibles

    Si tu veux que les trois actions (envoi, réception1 et réception2) se fasse dans cet ordre, il faudrait sans doute qu'elles soient, clairement, effectuées dans cet ordre au sein d'un seul et unique thread.

    Par contre, rien ne t'empêcherais d'avoir plusieurs threads qui font les trois actions de manière successives, ainsi, tu aurais plusieurs envois suivis de reception1 et de réception2 qui pourraient être effectués en meme temps
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai mis un pthread_join(reception2,NULL) a la toute fin , ce qui me fait marcher les 3 threads . Sauf que de temps en temps , le deuxieme et troisième s'inverse dans l'ordre . Ce qui va m'obliger a mettre des mutex non ?

  4. #4
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonjour,

    pthread_join() signifie que tu demande d'attendre que l'intégralité de tes thread soit terminé avant de continuer.

    Ce que t'as expliqué koala01 c'est que tu ne peux pas faire ce que tu veux de la façon dont tu l'a fait.
    Actuellement tes 3 threads sont exécuté en 'simultané' dans n'importe quel ordre. Je t'invite à te renseigné sur le fonctionnement des threads pour mieux comprendre

    Je pense donc que tu est la face à un problème d'analyse. Que souhaite tu faire exactement ?
    Peux tu nous décrire le fonctionnement que tu souhaiterais obtenir par un exemple ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    D'accord , merci de votre aide .

    J'ai une communication entre 2 applis .

    Sur mon programme , je souhaiterais envoyer des informations et recevoir une analyse de ces résultat ( que la seconde appli m'envoie automatiquement une fois les informations reçu) puis ensuite recevoir autre chose juste après ça , et tout cela tant que je ne quitte pas le programme ( par exemple la saisie d'un caractère . ) . Bien entendu en boucle infini et dans cette ordre là , c'est à dire envoi , puis reception , puis reception deuxième .

    J'espère que j'ai été clair .

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 173
    Par défaut
    Et pourquoi tu utilises pas juste un thread qui va executer une fonction après l'autre ?

    en gros un thread générale et juste appel à des fonctions qui font le travail

Discussions similaires

  1. ordre execution thread.
    Par javatar dans le forum Général Java
    Réponses: 6
    Dernier message: 06/01/2011, 14h03
  2. Thread et ordre d'insertion dans un arrayList
    Par cdtkoenig dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 28/10/2009, 13h32
  3. l'ordre d’exécution d'un thread
    Par amazircool dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 30/12/2007, 17h39
  4. L'ordre d'exécution des threads
    Par Dosseh dans le forum Modules
    Réponses: 1
    Dernier message: 05/07/2007, 20h24
  5. ordre de reprise de threads bloqués
    Par duaner dans le forum C#
    Réponses: 19
    Dernier message: 05/07/2007, 15h52

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