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 :

PostMessage et fin de thread


Sujet :

MFC

  1. #1
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut PostMessage et fin de thread
    Bonjour,

    J'ai un petit problème, la bonne nouvelle c'est que je sais d'ou ca vient mais il me manque la bonne solution pour le résoudre.

    Un thread fait un PostMessage vers mon application et passe en argument le pointeur d'une de ses variables locales.
    Lorsque le thread s'arrete, il peut rester encore des messages non traités qui remonte dans la file d'attente de mon application.
    Bref, ca plante lorsqu'un message emerge avec forcement un pointeur qui n'est plus valable (le thread étant terminé).

    Quelle serait la meilleur méthode pour éviter ce problème ? Une variable globale dans mon application que le thread modifierait ?
    J'utilise les mfc j'ai donc un objet CWinApp global qui peut être utilisé.

    Mon thread est en fait une méthode d'une classe (mon application instancie cette classe). J'ai pensé mettre une variable statique dedans, ou une variable public (j'envoie au thread comme paramètre this, donc il y a acces). C'est correct comme méthode ?

    J'ai cherché sur Google et le forum comment passer des objets avec un postmessage mais je n'ai rien trouvé de simple (new et delete avec des classes dérivées de ce qu'on veut envoyer).

    Merci.

  2. #2
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    plusieurs solutions:
    - faire un SendMessage à la place d'un PostMessage: le thread attend le retour et ne peux sortir avant..
    - la variable locale ne fait pas partie du thread mais de la classe fenêtre appelée.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Généralement, quand je fais des PostMessage d'un thread à l'autre, j'utilise de l'allocation dynamique...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Super, merci pour ta réponse rapide.
    Le plus simple dans mon cas est SendMessage que je ne connaissais pas.

  5. #5
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Médinoc : comment tu désalloues dans le cas du PostMessage ? et ou ?

  6. #6
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    tu desalloues dans la fonction de reponse aprés utilisation de la variable...

  7. #7
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    C'est vraiment correct de faire ca ? Il me semblait que c'était déconseillé d'allouer dans une classe et désallouer dans une autre. Si ca n'est pas le cas je me suis souvent fais suer pour rien

  8. #8
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    ça ne reglera pas pour autant le fait d'attendre que le thread ait terminé son boulot avant de quitter le programme....

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par titoine1978
    C'est vraiment correct de faire ca ? Il me semblait que c'était déconseillé d'allouer dans une classe et désallouer dans une autre. Si ca n'est pas le cas je me suis souvent fais suer pour rien
    Ce qui est déconseillé, c'est d'allouer dans un module (au sens: EXE, DLL) et désallouer dans un autre. Et encore, selon les fonctions utilisées, il peut n'y avoir aucune différence.
    (le malloc() et free() normaux feront une erreur à coup sûr en mode debug, je crois qu'il en est de même pour new et delete, mais par exemple, les LocalAlloc()/GlobalAlloc()/VirtualAlloc() doivent s'en moquer, de même que HeapAlloc(GetProcessHeap())...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. avertissement fin de Thread
    Par Papy214 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/01/2008, 14h06
  2. Fin de thread
    Par DarkBear dans le forum C#
    Réponses: 8
    Dernier message: 31/05/2007, 15h21
  3. [C#] Attente fin de thread
    Par ekinox17 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 18/05/2006, 15h52
  4. Fin de Thread
    Par Grey dans le forum MFC
    Réponses: 3
    Dernier message: 24/04/2006, 14h47
  5. Attendre la fin des threads fils d'un processus
    Par SteelBox dans le forum Windows
    Réponses: 15
    Dernier message: 24/02/2006, 16h08

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