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 :

Communication inter threads avec boost


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 34
    Par défaut Communication inter threads avec boost
    Bonjour,

    J'ai cherché à utiliser boost seulement j'ai une question : comment puis-je faire communiquer 2 threads de telle sorte que le premier envoi une message du type "send:event:toTh8:param:ID'5'", en gros une chaine de caractère?
    Au début je pensais utiliser une mémoire partagée avec un mutex pour gérer la lecture/écriture. Seulement j'aimerais pouvoir endormir un thread et que celui-ci ne se réveil que si il recoit un signal, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void funcTh1(){
    ...
    ...
    wait(signal);
    ...
    }
     
    void funcTh2(){
    ...
    sen_signal(toTh2, myMessage);
    ...
    }
    Je ne sais pas si je me fais comprendre.

    En tout cas si un tutaux existe dèja sur mon problème précis je m'excuse pour mon manque de recherche.

    Merci d'avance!!!!

  2. #2
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    pthread dispose d'un mécanisme de conditions (cf. un tuto à ce sujet sur ce même site).

    Après, tout dépendra de la librairie que tu utilises.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 34
    Par défaut
    Bonjour, j'utilise toute celle qui sont dans boost.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 34
    Par défaut
    Do c je n'utilise pas pthread mais plutôt boost::thread et toutes les librairies de boost que je peu avoir ^^

  5. #5
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    La mémoire partagée (shared memory) est réservée à la communication inter-processus. Pour de la communication inter-threads, rien de particulier n'est nécessaire puisque tous les threads ont accès à l'intégralité de la mémoire du processus. On pourra par exemple stocker l'info à partager dans une variable statique ou passer un pointeur vers l'emplacement partagé en argument au démarrage du thread.

    Concernant la "mise en sommeil jusqu'à ce que...", on utilise des condition variables. Pour Boost, voici l'exemple de la doc officielle. Note l'appel à "cond.wait" dans un thread et "cond.notify_one" dans un autre.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2012
    Messages : 34
    Par défaut
    Merci pour la réponse!

    Par contre si j'ai bien compris :

    mutex mutexLocker;

    - Communication entre thread1 et thread 2 :
    condition_variable cond1;
    void funcTh1(){
    unique_lock<boost::mutex> lock(mutexLocker);
    ...
    // Endormissement du thread
    cond1.wait(lock);
    ....

    void funcTh2(){
    ...
    // envoi de signal => débloquage de Th1
    cond1.notify_one();

    Si je veux faire de même entre Th1 et Th3 je créai un autre condition_variable? et/ou un autre mutex? A mon avis je dirais oui.

    Merci en tout cas pour l'aide.

    Bonne journée.

Discussions similaires

  1. Communication inter-threads par stdout sous linux
    Par millerf dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 17/07/2007, 11h28
  2. Réponses: 4
    Dernier message: 15/06/2007, 10h41
  3. Communication inter-threads: methode elegante?
    Par jc_isd dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h55
  4. [c#]Communication inter thread
    Par chasse dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/12/2006, 20h45
  5. communication inter-thread en c sous linux
    Par splinternabs dans le forum POSIX
    Réponses: 17
    Dernier message: 22/02/2006, 09h34

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