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