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 :

thread & fuite de mémoire ?


Sujet :

Threads & Processus C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 61
    Points
    61
    Par défaut thread & fuite de mémoire ?
    bonsoir,

    voila mon problème : dans une application, lorsque je lance un thread, celui-ci génère des fuites de mémoire ("possibly lost: 144 bytes in 1 blocks.", selon valgrind). ce thread ne fait strictement rien (pour l'instant). lorsque je commente la ligne qui lance le thread, il n'y a plus de fuites... j'ai essayé de rajouter un pthread_exit(NULL) mais c'est encore pire...

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pthread_t tPrompt ;
    pthread_create(&tPrompt, NULL, Server::PromptThread, NULL) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static void* PromptThread(void* arg) {} ;
    bref, si quelqu'un a une suggestion.. merci !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Tu as essayé en faisant un pthread_join dans ton thread de base?

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Regarde ce qui se passe si tu fais un pthread_join() avant de quitter le programme...

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    merci !

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    en fait, en faisait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pthread_join(tPrompt, NULL) ;
    niveau fuite c'est nickel, mais ca me bloque le thread qui lance l'autre thread en parralèle, et là le fait qu'il y ait plusieurs threads n'a plus vraiment d'intérêt :/
    il y a une solution, à part créer un autre thread dans mon main, qui fera ce que le main faisait jusqu'à présent, et de faire un pthread_join dessus ? (et encore je dis ca mais je sais même pas si ca marcherait)
    merci

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    L'autre solution est de faire un pthread_detach(), mais ça rend impossible pthread_join() sur le même thread. C'est l'un ou l'autre.

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    ok merci.

    et donc en faisant ce que j'ai dis plus haut (créer un nouveau thread, qui fera ce que faisait le main jusqu'à présent, et faire un pthread_join() dessus), est-ce que cela résoudrait mon problème ?

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    j'ai testé, et non, ca ne marche pas. il n'y a vraiment pas de solution ? c'est dingue ca, que les threads fuient..

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Dis, ce serait pas une bonne idée de te demander pourquoi tu veux créer un thread?
    Généralement on crée des threads pour exécuter de taches de façon asynchrone, mais ça ne signifie pas pour autant qu'on laisse le programme se terminer à la sauvage sans tester que toutes les taches sont bien terminées.

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    bin j'ai la partie "main" du programme, qui gère un socket pour communiquer avec un serveur, et mon fameux thread, qui s'occupe de l'affichage & la communication avec l'utilisateur (en fait, c'est une espèce de shell).
    dans ce thread, il y a un "while (bool)" qui teste l'entrée standard, et à l'arrêt de mon programme, la partie "socket" change la valeur du bool et donc, c'est la fin du thread... enfin la fin de la fonction, on passe au "return (void*) NULL". je me suis inspiré de codes existants sur le net, je sais pas trop ce que je peux faire de plus...

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Dans ce cas, je suggère de mettre un appel à pthread_join() juste après avoir changé la valeur dudit bool...

Discussions similaires

  1. thread et "fuite mémoire"
    Par ChriGoLioNaDor dans le forum Threads & Processus
    Réponses: 18
    Dernier message: 17/03/2006, 01h00
  2. Réponses: 1
    Dernier message: 02/12/2005, 15h18
  3. fuite de mémoire
    Par mamag dans le forum MFC
    Réponses: 17
    Dernier message: 19/08/2005, 11h42
  4. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 21h44
  5. Réponses: 8
    Dernier message: 17/10/2002, 13h52

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