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

MFC Discussion :

Communication entre des threads


Sujet :

MFC

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Salut,
    Ton appli possède déjà une boucle de message, tu dois utiliser celle-ci pour intercepter ton message user.

    Pour ma part je ferais comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #define WM_USER_SHOW (WM_USER+0x01) // à définir des deux cotés
     
    BEGIN_MESSAGE_MAP()
    ....
    ON_MESSAGE(WM_USER_SHOW , OnUserMsgShow)
    ...
    END_MESSAGE_MAP()
     
    LRESULT OnUserMsgShow(WPARAM wParam, LPARAM lParam)
    {...}
    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    afx_msg LRESULT OnUserMsgShow(WPARAM wParam=0, LPARAM lParam=0);

  2. #22
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Ok mais comment faire pour pouvoir lancer une fonction existante à partir de cette fonction de détection de message ?
    Ma fonction n'est plus reconnue à l'intérieur de cette entité.

  3. #23
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    En plus, le compilateur n'a pas l'air d'apprécier cette fonction.
    -> Error LNK2001 : unresolved external symbol "public: long __thiscall DemokitS::OnUserMsgShow(unsigned int,long)" ...

  4. #24
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Analog13
    Ok mais comment faire pour pouvoir lancer une fonction existante à partir de cette fonction de détection de message ?
    Ma fonction n'est plus reconnue à l'intérieur de cette entité.
    voir faq: http://c.developpez.com/faq/vc/?page...PrivateMessage

  5. #25
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Même en suivant le tutorile (ce que j'avais déjà fait), celà ne fonctionne toujours pas. Il y a toujours la même erreur.
    Il n'existe pas un moeyn d'avoir une sorte de synchronisation, quand on reçoit le message privé, pour que celui-ci soit interprété directement ?

  6. #26
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    si ça fonctionne ... , tu dois te tromper dans ton implementation,
    montre ton message d'erreur.

  7. #27
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    C'est exactement le même que celui que j'ai écris juste avant.
    Error LNK2001 : unresolved external symbol "public: long __thiscall DemokitS::OnUserMsgShow(unsigned int,long)"

  8. #28
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    hé bien dans ce cas:
    tu n'as pas implementé la fonction OnUserMsgShow(unsigned int,long) dans la classe DemokitS.

  9. #29
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Celà signifie que je n'ai pas écris son code à l'intérieur de ma classe, c'est ça ?
    Pourtant, j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    long OnUserMsgShow(WPARAM wparam,LPARAM lparam)
    {
         AfxMessageBox("Display");
         return 0;
    }
    Si ce n'est pas ça, je crois que j'ai encore besoin d'explications.

    Le second problème, c'est que je ne peux pas lancer ma fonction d'affichage depuis OnUserMsgShow car elle n'est pas reconnue ???

  10. #30
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    long DemokitS::OnUserMsgShow(WPARAM wparam,LPARAM lparam)
    {
         AfxMessageBox("Display");
         return 0;
    }

  11. #31
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Effectivement c'était bien ça en ce qui concerne cette erreur de compilation. Bien vu. Merci beaucoup pour votre aide.

    Par contre, la fonction OnUserMsgShow n'est jamais lancée par l'application.
    Soit le message n'arrive pas, soit il y a autre chose ??

  12. #32
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Alors vous n'avez pas d'idées d'où ça pourrait venir ?
    On dirai que le message n'est jamais redirigé vers la fonction OnUserMsgShow.
    Le problème c'est que je ne vois pas vraiment ce qui manque pour que ça soit le cas ?

  13. #33
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Analog13
    Alors vous n'avez pas d'idées d'où ça pourrait venir ?
    On dirai que le message n'est jamais redirigé vers la fonction OnUserMsgShow.
    Le problème c'est que je ne vois pas vraiment ce qui manque pour que ça soit le cas ?
    que le handle de fenêtre spécifié dans le message ne soit pas correcte ...

  14. #34
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    C'est un handle "universel" pour que le message soit envoyé à tout le monde et pour éviter ce genre de problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PostMessage(HWND_BROADCAST,WM_USER_SHOW,0,0);
    Cette méthode fonctionnait avec mon précédent code, donc je ne vois pas pourquoi ça ne serai plus le cas ?

  15. #35
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    HWND_BROADCAST est envoyé aux fenêtres de premier niveau pas aux fenêtres filles .

  16. #36
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    Ma fenêtre n'est pas une fenêtre fille, et comme je l'ai dis précédement, cette méthode de transmission de message fonctionnait très bien (cf message #20).
    Il faut peut être utiliser une autre solution ?

  17. #37
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Analog13
    Ma fenêtre n'est pas une fenêtre fille, et comme je l'ai dis précédement, cette méthode de transmission de message fonctionnait très bien (cf message #20).
    Il faut peut être utiliser une autre solution ?
    appliquer correctement la méthode indiquée dans la faq...

    il ne faut pas tout mélanger et bien comprendre ce qu'on utilise:
    Ta méthode (pas terrible) fonctionnait parce que tu as implémenté une pompe à message qui donc intercepte tous les messages destinés à l'application rien de plus.
    vu comme ça c'est sûr ça fonctionnait, tu as juste court circuité le mécanisme d'acheminement des messages aux fenêtres...

  18. #38
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Par défaut
    C'est tout de suite plus clair avec quelques explications.
    Et ça marche beaucoup mieux.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/01/2008, 14h17
  2. variables partagées entre des threads
    Par Aragorc dans le forum Delphi
    Réponses: 27
    Dernier message: 06/10/2006, 16h12
  3. Communication entre 2 thread
    Par poxigua dans le forum GTK+
    Réponses: 3
    Dernier message: 08/08/2006, 17h59
  4. Communication entre 2 threads
    Par marsupilami34 dans le forum Langage
    Réponses: 4
    Dernier message: 26/08/2005, 16h08
  5. Communication entre deux Threads
    Par rvzip64 dans le forum Langage
    Réponses: 13
    Dernier message: 28/01/2005, 10h14

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