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

C++ Discussion :

Liberation de la memoire en Multi-Thread


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut Liberation de la memoire en Multi-Thread
    Bonjour à tous !

    Et oui... Ca faisait longtemp que j'avais pas poster sur le forum donc je me relance

    Alors voila mon problème, j'ai une appli (encore ma gestion de parc) qui reçoit en winsock un fichier puis doit le traiter. Le traitement de ce fichier se fait dans un thread séparé de la gestion de la reception winsock. Pour créer le thread j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateThread(NULL, 0, lectureFichierGPS, pData, 0, NULL);
    Le gros souci c'est que ok le thread se termine bien, dans le gestionnaire de tache je vois bien que pendant un moment il monte à 2 thread puis redescend à 1 mais le problème c'est que la mémoire utilisé par mon programme augmente et ne redescend jamais, et oui un gros souci de libération de mémoire... Je pensais devoir utilisé un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CloseHandle(hThread[i]);
    Mais le gros souci c'est que il faut attendre la fin du thread pour faire ça, moi là je peux pas attendre la fin puisque pendant ce temps je traite un nouveau fichier.

    Une petite idée messieurs?
    Cette gestion de parc touche à sa fin... (enfin pour le moteur du moins, l'administration avec interface graphique faut que je vois, faut que je me mette à QT )

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Les seuls espaces de mémoire qui pourraient rester à la fin du thread viendraient d'allocations crées avec un new mais pas libérées. Toutes les variables créées localement dans le thread sont détruites avec celui-ci.

    Toujours la même règle : à chaque new doit être associé un delete

    Ton "pData" étant un pointeur, est-ce que son espace mémoire est bien libéré à la fin de ton thread?

  3. #3
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Merci pour ta réponse
    Justement le pData est créer dans la fonction qui appelle le thread, comment liberer cette variable puisque je ne sais pas quand le thread est fini...

  4. #4
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Ben, par exemple, à la fin du thread une fois que tu y as fini tout traitement.

  5. #5
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    J'ai rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HeapFree(GetProcessHeap(), 0, pData);
    Comme trouvé dans l'exemple sur msdn... mais ça ne change rien niveau memoir, à chaque nouveau thread 3mo à peu pres en plus pas liberé...

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    C'est quoi la structure de ton pData?
    Parceque selon la complexité de ton paramètre, peut être qu'un simple à la fin de ton thread peut suffire...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par Verbalinsurection Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CloseHandle(hThread[i]);
    Mais le gros souci c'est que il faut attendre la fin du thread pour faire ça,
    Moult te goures. Tu peux fermer le handle du thread dès sa création si tu ne l'utilises plus par la suite...
    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.

  8. #8
    Membre confirmé Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Par défaut
    Un ptit up car je ne m'en ors pas, j'ai pourtant bien verifié, je pense bien avoir verifié toutes mes allocation sont bien libéré (enfin ça c'est que je crois mais la preuve que non). Alors si quelqu'un a une solution sous codeblocks et ming pour voir les alloc pas libere....

    Merci!

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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