Muss ich CloseHandle() auf einem thread behandeln?
_beginthreadex gibt ein handle für einen thread:
m_hStreamStatsThread = (HANDLE) _beginthreadex( NULL, 0, StreamStatsThread, this, 0, NULL );
Dieses handle kann verwendet werden, wenn Sie sich einfach in den thread Aufrufe, wie TerminateThread(..) zum Beispiel.
Laut auf der MSDN-Seite auf _beginthreadex, _beginthreadex nicht immer wieder ein gültiges handle - z.B. kann es auch zurück,- 1L bei Fehler usw.
Wenn ein thread abgeschlossen hat, normalerweise, muss ich call CloseHandle auf das thread-handle, oder kann ich einfach setzen Sie den Wert auf NULL /INVALID_HANDLE_VALUE?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stimmen mit Nemanja Trifunovic.
Sogar, nachdem der thread beendet - das handle gültig ist. Sie können zum Beispiel Abfragen seiner Rückkehr Wert.
Als Allgemeine Regel gilt: jedes Win32-handle geschlossen werden muss, durch
CloseHandle
, sofern nicht anders angegeben.HANDLE
). Für jemanden, der arbeitet mit WinAPI ist klar, aber ich habe gesehen, Menschen, die versuchen, schließen Sie den windows - /Ressource-handles (HWND
,HICON
, ...) mitCloseHandle
. 🙂Dem code-Beispiel auf der MSDN-Seite Ihnen einen link gepostet, enthält einen Aufruf
CloseHandle()
. Einstellung des Griffs auf NULL verringert nicht die kernel-Objekt der internen ref-count und ist ziemlich nutzlos sowieso.