2010-10-18 16 views
5

_beginthreadex devuelve un identificador a un hilo:¿Debo CloseHandle() en un manejador de hilo?

m_hStreamStatsThread = (HANDLE) _beginthreadex(NULL, 0, StreamStatsThread, this, 0, NULL); 

Este mango se puede utilizar si necesita hacer referencia a la rosca de llamadas como TerminateThread (..) por ejemplo.

Según the MSDN page on _beginthreadex, _beginthreadex no siempre devolverá un identificador válido, p. también puede devolver -1L por error, etc.

Cuando un hilo se ha completado normalmente, ¿tengo que llamar a CloseHandle en el controlador de hilo, o puedo simplemente establecer su valor en NULL/INVALID_HANDLE_VALUE?

Respuesta

9

De acuerdo con Nemanja Trifunovic.

Incluso después de salir del hilo, su identificador es válido. Por ejemplo, puede consultar su valor de retorno.

Como regla general: cada identificador de Win32 debe cerrarse por CloseHandle, a menos que se especifique lo contrario.

+2

Cualquier Win32 * kernel * handle (es decir, cualquier cosa que sea de tipo 'HANDLE'). Para alguien que trabaja con WinAPI es obvio, pero he visto personas tratando de cerrar ventanas/recursos ('HWND',' HICON', ...) con 'CloseHandle'. :) –

+1

Sí, tienes razón. El punto es cerrar los controladores del kernel. Esos HWND, HICON, HCURSOR y etc. son identificadores de usuario. – valdo

+1

P.S. Controles de usuario, quiero decir, identificadores compatibles con user32. – valdo

3

El ejemplo de código en la página de MSDN donde ha publicado un enlace incluye una llamada al CloseHandle(). Establecer el valor del control en NULL no disminuye el recuento de ref internos del objeto kernel y de todos modos es bastante inútil.

Cuestiones relacionadas