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 :

Interaction entre thread principal et thread secondaire


Sujet :

Threads & Processus C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut Interaction entre thread principal et thread secondaire
    Salut,
    Dans mon application C++, j'ai besoin d'utiliser le multithreading, donc je crée des threads secondaire à l'aide de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _beginthread(arg1,arg2,arg3)
    .

    Mon problème c'est que je n'arrive pas à faire une interaction entre mon thread principal et mon thread secondaire. Plus clairement, je veux à partir de mon thread secondaire faire un rafraichissement graphique dans le thread principal.

    ça fait un bon moment que je suis coincé la dessus donc si vous pouvez m'aider n'hésitez pas SVP.

    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Avec les MFCs, je préfère créer les threads via AfxBeginThread et un objet CWinThread.

    Sinon, pour une simple notification, j'enverrais un message (au sens windows) depuis le thread secondaire vers le thread principale.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Merci beaucoup 3DArchi pour ta réponse.
    je préfère créer les threads via AfxBeginThread et un objet CWinThread.
    C'est quoi l'avantage de cette fonction par rapport à _beginthread ?

    j'enverrais un message (au sens windows) depuis le thread secondaire vers le thread principale.
    Comment on peux faire ça (quelle focntion)?

    Merci encore.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    C'est quoi l'avantage de cette fonction par rapport à _beginthread ?
    Plein de cochonneries que les MFC font en cachettes pour avoir des informations sur les thread et leurs allocations mémoires.
    Donc si ton thread appel des classes, méthodes, fonction etc... des MFC, suis scrupuleusement 3DArchi.

    Comment on peux faire ça (quelle focntion)?
    PostMessage
    http://msdn.microsoft.com/en-us/libr...44(VS.85).aspx

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par mehdi_me85 Voir le message
    C'est quoi l'avantage de cette fonction par rapport à _beginthread ?
    Disons que je voulais plutôt parler de CreateThread pour un thread de travail. La différence :
    Citation Envoyé par MSDN
    _beginthread and _beginthreadex are similar to the CreateThread function in the Win32 API but has these differences:
    * They initialize certain C run-time library variables. This is important only if you use the C run-time library in your threads.
    * CreateThread helps provide control over security attributes. You can use this function to start a thread in a suspended state.
    Citation Envoyé par mehdi_me85 Voir le message
    Comment on peux faire ça (quelle focntion)?
    PostMessage : tu transmet à ton thread le HWND qui te sert de boîte aux lettres, tu te définis un petit message WM_MA_NOTIFICATION, tu traites sa réception côté thread principal et son envoi côté thread secondaire. Cela suppose bien sûr :
    - que tu n'as aucun échange de données (en particulier pointeurs et références) entre les 2 threads,
    - que le HWND de ta boîte aux lettres a une durée de vie plus importante que ton thread de travail.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Merci bacelar,
    En fait, pour les éléments graphiques j'utilise ILOG Views (stage oblige). Est ce donc toujours nécessaire d'utiliser AfxBeginThread ?
    Merci

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Art! Le problème d'Ilog, c'est que c'est propriétaire et qu'il n'y a pas beaucoup de doc
    Ton projet contient aussi les MFC ?
    Sinon, passes simplement par CreateThread.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Non le projet ne contient pas de MFC, je vais essayer de suivre tes conseil. Je tiendrai au courant.

    Merci pour vous deux.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Si vous n'utilisez pas les MFC; utiliser "_beginthread" et pas "CreateThread" car il peut présenté des problèmes avec la libC (un comme _beginthread avec les MFC).
    _beginthread fait des initialisations dans la libC que "CreateThread" ne fait pas.
    Et tout le monde, ou presque, utilise la libC.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Bonjour,
    Depuis hier soir, j'essaie d'envoyer une notification sans succès.
    Voilà ce que je fait (ça ne marche pas au compil) :
    fctThreadPrincipal.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #define WM_REDRAW WM_USER+100
    class Class: public ClasseMére
    {
    public
    class;
    ~class;
    ...
    void fct_message(arg1,arg2,arg3)
    }
    fctThreadPrincipal.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ON_MESSAGE(WM_REDRAW,fct_message)
    class::class(){}
    ...
    class::fct_message(arg1,arg2,arg3){}
    Je n'arrive pas à avancer, donc toute aide sera très précieuse.
    Merci
    N.B: J'utilise pas les MFC.

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    1/ Récupères le HWND de la fenêtre à rafraîchir,
    2/ Dans la création du thread, envoi à ton thread ce HWND,
    3/ Dans le thread de travail : :ostMessage(the_hwnd,WM_REDRAW ,0,0);
    4/ Dans le thread principal, dans la fenêtre concernée, il faut rajouter le ON_MESSAGE(WM_REDRAW,OnRedraw) (à l'instar des autre messages).

    Le problème c'est que je ne me souvient pas comment sont encapsulées les fenêtre avec Ilog. Ca doit se jouer là dedans...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Merci pour ta réponse,

    Les objets que j'ai envie de rafraichir sont dans la fenêtre principale, Je fait comment pour récupérer son HWND.

    Merci.

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Quelle est la classe de ta fenêtre principale ?

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    La classe de ma fenêtre principale s'appelle class MainPanel
    Les objets graphiques qu'elle contient sont crées dans d'autres classes, par exemple class PanelTabHoraire (pour un tableau).
    Et je souhaite faire le rafraichissement dans une autre classe qui s'appelle class Representation.

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    De quoi MainPanel dérive-t-elle ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Cette classe dérive de IlvGadgetContainer (une fonction ILOG Views), en bref c'est l'équivalent de QTabWidget en Qt, c'est plusieurs onglet avec un menu et quelques autres abjets.

  17. #17
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Il n'y aurait pas une fonction IlvView::getSystemView qui te retourne un HWND ? Le problème, c'est que je risque de t'orienter vers des solutions windows alors que c'est possible autrement directement avec Ilog. Mais, leur doc n'est pas publique Donc, c'est difficile de t'orienter correctement. Ne peux-tu bénéficier d'un support avec la licence ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Si la fonction existe bel et bien, voila le seul site qui propose une doc pour ILOG :
    ILOG VIEWS.

    ILOG SERVER

    On sait jamais, ça peut être utile.

  19. #19
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par mehdi_me85 Voir le message
    Si la fonction existe bel et bien, voila le seul site qui propose une doc pour ILOG :
    ILOG VIEWS.

    ILOG SERVER

    On sait jamais, ça peut être utile.
    Le site n'est pas publique ! L'accès y est restreint.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Points : 85
    Points
    85
    Par défaut
    Non, je ne pense pas. Je n'ai aucune autorisation de la part du site et tu peux y accéder à partir de google (comme j'ai fait).

    La doc est officielle mais le site est le site de l'école polytechnique, et je n'ai rien à voir avec l'école polytechnique.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/05/2013, 18h15
  2. Réponses: 11
    Dernier message: 24/10/2010, 20h28
  3. [QThread] Comment attendre une information d'un thread dans le thread principal ?
    Par f.denis dans le forum Multithreading
    Réponses: 5
    Dernier message: 15/04/2010, 11h57
  4. Réponses: 7
    Dernier message: 03/07/2009, 13h45
  5. message entre dialog box et thread
    Par scorbo dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2004, 11h01

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