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 :

Closehandle & CreateThread


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 6
    Par d�faut Closehandle & CreateThread
    Bonjour,

    J'ai trouv� dans MSDN le bout de code suivant :

    If the connection is successful, write and read worker threads are created.

    CloseHandle (CreateThread(NULL, 0, ReadThread, (LPVOID)s, 0, NULL));
    WriteThread ((LPVOID)s);
    A la page CloseHandle de MSDN, il y a la phrase suivante :

    Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, and then close all handles to the thread.
    Je suis surpris par l'utilisation du CloseHandle. Je m'explique : lors de la cr�ation d'un thread avec la fonction CreateThread, celle ci retourne un handle qui permet de g�rer le thread.

    Si le handle associ� au thread est ferm� d�s la naissance du thread, est ce que le comportement du thread est modifi� ou sa gestion par l'OS est alt�r�?

    Que se passe t il au niveau de l'OS si j'utilise CreateThread sans r�cup�rer le HANDLE retourn� par cette fonction ?

    Je cherche a �viter toute suite de m�moire de mani�re � ne pas faire saturer la m�moire.

    Seb

  2. #2
    Expert confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut Re: Closehandle & CreateThread
    Citation Envoy� par sebastakis
    Je suis surpris par l'utilisation du CloseHandle. Je m'explique : lors de la cr�ation d'un thread avec la fonction CreateThread, celle ci retourne un handle qui permet de g�rer le thread.

    Si le handle associ� au thread est ferm� d�s la naissance du thread, est ce que le comportement du thread est modifi� ou sa gestion par l'OS est alt�r�?
    Non. Tu perd simplement la possibilit� de le contr�ler.

    Citation Envoy� par sebastakis
    Que se passe t il au niveau de l'OS si j'utilise CreateThread sans r�cup�rer le HANDLE retourn� par cette fonction ?
    Ce handle t'es renvoy�, que tu le r�cup�re ou non. Si tu ne le r�cup�re pas, il est perdu au niveau de ton code, mais il existe au sein de ton process.

    Citation Envoy� par sebastakis
    Je cherche a �viter toute suite de m�moire de mani�re � ne pas faire saturer la m�moire.
    Si tu ne fait pas de CloseHandle, la m�moire allou�e pour l'objet thread ne sera pas lib�r�e, du moins pas avant la fin de ton processus. C'est pas �norme, mais c'est bien une fuite de m�moire.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 6
    Par d�faut
    Si tu ne fait pas de CloseHandle, la m�moire allou�e pour l'objet thread ne sera pas lib�r�e, du moins pas avant la fin de ton processus. C'est pas �norme, mais c'est bien une fuite de m�moire.
    Mais si j'utilise CloseHandle(CreateThread..... lors de la cr�ation de mon thread , que se passe t il lorsque mon thread se termine? Est ce que l'ensemble des m�moires allou�es pour ce thread sont lib�r�es?

    En bref reste t il une fuite de m�moire?

  4. #4
    Expert confirm�

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

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Il faut distinguer 2 choses :
    - l'objet noyau thread interne � Windows, dont la dur�e de vie est g�r�e par le m�canisme des handle
    - les actions effectu�es par ton thread lorsqu'il est "vivant", en particulier la m�moire utilisateur qu'il a allou�, au sein de ton process.
    Les ressources allou�es par ton thread sont par d�faut vues comme des ressources du process tout entier, et non pas sp�cifiques � ton thread.
    Ca veut dire que par d�faut, tout ce que ton thread a allou�, rien ne sera lib�r� lors de sa mort. Windows ne fera le m�nage que lors de la mort du process.
    Y'a quelques cas particuliers, comme les Thread Local Storage, mais mieux vaut consid�rer que tout ce que le thread n'aura pas lib�r� est perdu (fuite de m�moire...).

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 6
    Par d�faut
    Si je comprends bien l'objet noyau thread interne � Windows est g�r� par le handle qui lui est associ� lors de l'execution de la fonction CreateThread.

    si j'utilise un CloseHandle sur l'objet noyau thread alors qu'il est vivant, comment l'OS peut il piloter le thread (changement de contexte, priorit�....)?

    Pour le reste concernant la lib�ration de la m�moire allou�e, je suis d'accord avec toi.

Discussions similaires

  1. R�ponses: 5
    Dernier message: 24/01/2004, 12h53

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