Closehandle & CreateThread
Bonjour,
J'ai trouvé dans MSDN le bout de code suivant :
Citation:
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 :
Citation:
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
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.