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

Threads & Processus C++ Discussion :

communication entre un std::thread et le main


Sujet :

Threads & Processus C++

  1. #1
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut communication entre un std::thread et le main
    Bonjour,

    Je travail sur un projet possédant deux boucles d’événements. la première boucle B1 est dans le main et la deuxième boucle B2 dans un std::thread.
    B1 attend des événements clavier souris ou autre.
    B2 est un while(1) m'étant à jour des valeurs.

    Mon objectif est de faire en sorte que B2 puisse donnée ses données à B1 et de lui dire de se mettre à jour.
    Le problème est que je n'arrive pas à mettre la main sur un cours/code qui permet une discutions entre le main et un std::thread.

    Cordialement,
    Robin

  2. #2
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    A oui j'ai oublier de dire que je travail sous windows (d'où le std::thread).

  3. #3
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Le std::thread n'a rien à voir avec Windows, ça fait partie de la librairie standard. Difficile de te donner une réponse idéal sans contexte mais tu peux toujours utiliser une variable connue de B1 et B2 (mémoire partagée). Il suffit que tu crées un pointeur vers un objet (std::shared_ptr par exemple) et que tu le passes au thread. Par contre si les deux threads écrivent dans la même variable tu pourras constater des data-race et bref ça va commencer à être plus difficile et d'autres solutions pourraient mieux te convenir.

  4. #4
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    Oui je sais que std::thread n'a rien a voir avec windows. C'est juste que comme il fait parti de la librairie standard il fonctionne sous windows (entre autre).

    En fait le problème que j'ai plus précisément est que je ne peut pas faire un rendu opengl avec le pointeur de la fenêtre opengl dans un autre thread.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 960
    Points
    32 960
    Billets dans le blog
    4
    Par défaut
    Salut,

    y'a fort à parier que tu peux passer un paramètre à ton thread lors de sa création.
    Passe-lui une classe que tu crées dans le main thread et utilise-la pour "parler avec le main thread".
    Inutile de chercher plus compliqué.

    Le cas d'OpenGL est différent, mais tu peux faire le rendu dans un autre thread (ouf), cherche "opengl thread context render" ou assimilé.
    Tu peux aussi regarder la source de SFML et t'intéresser aux méthodes de la window (setActive en particulier qui permet ça - création de la window/context dans un thread, dessin dans un autre thread).
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    Bonjour,

    Merci pour l'astuce de la classe "message". Cela à l'air de bien fonctionner.
    Je ne travail pas avec la SFML mais avec Qt. Cela dit il y a un équivalent a setActive, c'est setFocus.

    Merci beaucoup pour vos réponses.

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

Discussions similaires

  1. Communication entre GUI et thread
    Par Harry_Covair dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 12/08/2011, 16h23
  2. Communication entre EDT et le thread main
    Par riadhhwajdii dans le forum EDT/SwingWorker
    Réponses: 1
    Dernier message: 19/10/2010, 10h56
  3. [c#][threading] communication entre threads
    Par orelero dans le forum C#
    Réponses: 6
    Dernier message: 02/01/2006, 00h42
  4. Communication entre 2 threads
    Par marsupilami34 dans le forum Langage
    Réponses: 4
    Dernier message: 26/08/2005, 15h08
  5. Communication entre deux Threads
    Par rvzip64 dans le forum Langage
    Réponses: 13
    Dernier message: 28/01/2005, 09h14

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