[thread] Nettoyage après la fin d'un thread
Bonjour,
je développe une classe C++ pour gérer les threads (interfaçant les API WIn32).
J'aurai besoin de plusieurs petites précisions pour le nettoyage à faire après la fin d'un thread et de l'utilisation de l'API CloseHandle.
1. Après le kill d'un thread par l'API "TerminateThread", est-il nécessaire d'utiliser CloseHandle sur le handle du thread ?
2. Le thread se termine de lui-même (il a terminé ce qu'il avait à faire) peut-il lui-même appelé la fonction CloseHandle juste avant de terminer ?
Exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| // Launch-Start thread
HANDLE classThread::launch(void)
{
if(this->status != THREAD_NOT_RUNNING) return this->handle;
// Create thread & return handle
this->handle = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)_threadFn, (LPVOID)this, NULL, &this->_id);
return this->handle;
}
// Main thread function
UINT32 classThread::_threadFn(void * lParam)
{
classThread &thread = (classThread&)lParam;
// Change status
thread.status = THREAD_RUNNING;
// Execute main function
thread.mainFn();
// Clean up
CloseHandle(thread.handle);
thread.handle = NULL;
// Change status
thread.status = THREAD_NOT_RUNNING;
return 0;
} |
Merci.