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 :

[MFC] Thread & memory leaks


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 18
    Points
    18
    Par défaut [MFC] Thread & memory leaks
    Salut,

    A la fermeture de mon appli, j'attends la fin d'un processus, mais il y a tt de meme un memory leak :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    The thread 0x30C has exited with code 0 (0x0).
    Detected memory leaks!
    Dumping objects ->
    strcore.cpp(118) : {2397} normal block at 0x002F66B0, 80 bytes long.
     Data: <        C   100,> 01 00 00 00 07 00 00 00 43 00 00 00 31 30 30 2C 
    thrdcore.cpp(166) : {2306} client block at 0x00991E78, subtype 0, 112 bytes long.
    a CWinThread object at $00991E78, 112 bytes long
    Object dump complete.
    Si je mets un AfxMessageBox apres avoir demandé la fin du thread, ces memory leaks n'apparaissent plus... magie??
    meme si je n'attends plus la fin du thread apres...

    Pourriez vous m'aider? merci
    Racailloux

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Les "fuites de mémoires" apparaissent lorsqu'on a allloué des instances de classes et qu'on les a mal effacées notamment des collections comme CList , CArray , CObArray , CObList etc....
    Ou bien avec new sans delete !
    Donc revérifier le code pour voir si tous les objets sont bien désinstanciés.
    Un thread c'est un peu un autre programme qui s'exécute au sein d'un programme père .
    Lorsqu'il se termine il faut effacer les objets alloués

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    A vrai dire, je me connecte a du materiel.

    Lorsque je me deconnecte et qu'apres je quitte l'appli, tt va bien.

    Mais des que je quitte l'appli, sans me deconnecter, y a memory leak, sauf si il y a un AfxMessageBox lors de la deconnexion.

    Donc je pense que mon thread n'arrive pas a se terminer si l'utilisateur a la main sur l'appli... mais je vois pas comment faire pour eviter de devoir mettre un messagebox

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Mais des que je quitte l'appli, sans me deconnecter, y a memory leak, sauf si il y a un AfxMessageBox lors de la deconnexion.
    Tout à fait Thierry le thread n'est pas totalement terminé lorsque le processus parent lui se termine.
    En fait je me suis un peu trompé dans mon affirmation précédente les fuites de mémoires ne sont pas seulement entrainées par des non désallocations d'instances de classes mais aussi par des threads démarrés qui ne sont pas correctement terminés.
    Parce que lorsqu'on démarre un thread il ya allocation mémoire spécifique , méchanisme de pile etc...

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    super thierry... il me semblait que c'etait un truc dans le genre :p


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_pThRefresh = AfxBeginThread(ThreadRefresh,this,0,0,0,NULL);
    Voila comment j'initialise mon thread, et pour se terminer, jusque la j'utilisais un bool qui le faisait se terminer, ce qui est le cas.
    Donc comment liberer la memoire du thread lui meme? (j'ai essayer de remplacer l'AfxMessageBox par un vulgaire Sleep, mais la messagebox doit etre magique lol)

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    La méthode propre d'arrêter un thread c'est de le lui demander gentilment. Encore faut-il lui laisser le temps de s'arrêter, car si tu lui demandes à la fin de ton WinMain, dès le WinMain terminé le process est tué, et donc le 2° thread avec.
    Ajoute une synchro avant de quiter, après avoir demander au thread de s'arrêter, dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // demander au thread de s'arrêter
    myThread->Stop();
    // lui laisser 5 sec pour le faire
    if ( WaitForSingleObject( myThread, 5000 ) == WAIT_TIMEOUT )
    {
        // il ne s'est pas terminé, être un peu plus autoritaire
        TerminateThread( myThread ); // ou AfxEndThread peut etre
    }

  7. #7
    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,
    ces problemes sont evoques dans la faq

  8. #8
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par farscape
    salut,
    ces problemes sont evoques dans la faq

    Farscape il faut sévir maintenant

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/10/2010, 20h08
  2. Compilation TAO / Mfc : Memory Leaks
    Par Rolsct dans le forum CORBA
    Réponses: 4
    Dernier message: 17/04/2005, 19h13
  3. [MFC] A la chasse au memory leak
    Par Yabo dans le forum MFC
    Réponses: 17
    Dernier message: 27/06/2004, 17h35
  4. Réponses: 7
    Dernier message: 26/02/2004, 09h32
  5. Réponses: 3
    Dernier message: 11/02/2004, 12h50

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