helpful post

_endthread와 _endthreadex (explicitly) 호출할까 말까?

jaster 2008. 5. 22. 16:25
반응형
_endthread_endthreadex를 명시적으로(explicitly) 호출할까 말까?
_beginthread는 _endthread와, _beginthreadex는 _endthreadex와 각각 짝을 이룹니다. _endthread와 _endthreadex는 스레드가 인자로 쓰인 루틴에서 되돌아올 때 자동으로 호출되나 명시적으로 호출할 수 있습니다.

_endthread : Win32 CloseHandle API 처럼 자동으로 스레드 핸들을 닫습니다.
따라서 Win 32 CloseHandle API 불러 명시적으로 스레드 핸들을 닫으면 안됩니다.

_endthreadex : Win32 ExitThread API 처럼 스레드 핸들을 닫지 않습니다.
따라서 Win 32 CloseHandle API 호출에 의한 스레드 핸들을 닫아야 합니다.

결론 
_endthread와 _endthreadex는 모두 명시적으로 호출하지 않아도 자동으로 호출되지만, _beginthread를 사용했을 경우에는 CloseHandle를 호출하면 Exception이 발생합니다(Window NT 이상).
반면에 _beginthreaex를 사용했을 경우에는 반드시 CloseHandle를 호출해야 합니다.

Note : Libcmt.lib와 연관된 실행파일은 Win32 ExitThread API를 호출하면 안됩니다. 이는 스레드에 할당된 자원 회수를 방해합니다. _endthread 와 _endthreaex는 스레드에 할당된 자원을 회수한 수 ExitThread를 부릅니다.
반응형