관리 메뉴

드럼치는 프로그래머

[TCP/IP] CreateThread 후에 바로 CloseHandle하는 이유 본문

★─Programing/☆─TCP IP

[TCP/IP] CreateThread 후에 바로 CloseHandle하는 이유

드럼치는한동이 2008. 5. 9. 16:10

쓰레드를 만든다음 바로 CloseHandle()로 handle을 닫던가

아님 쓰레드 종료 이벤트 발생시 CloseHandle()을 이용 handle을 닫아야 한다.

 

아래는 CreateThread()함수를 이용하여 쓰레드 생성 후 바로 CloseHandle()함수를 호출하여

handle을 닫는 것에 대한 답변이다...

 

쓰레드를 만든다음 바로 CloseHandle()하는 것이 정상입니다.

그렇게 한다고 해서 쓰레드를 쓰지 못하느것도 아니고요. 쓰레드의 경우 생성하면서 참조 번호(?)라는게 생기는데 마치 dll처럼여.

 

생성하면 참조번호가 하나 증가하고 쓰레드 함수가 호출되면 또 참조번호가 증가합니다.

 

따라서 쓰레드를 만들게 되면 참조 번호가 2가 됩니다.

 

그런데 쓰레드 함수가 리턴하게 되면(쓰레드 함수내에서 처리 과정이 모두 끝나서 리턴하는 경우) 참조번호를 하나 감소 시키고, 마찬가지로 CloseHandle()함수에 해당 쓰레드 핸들을 넣어서 호출해도 참조 번호가 하나 감소하게 되죠.

 

최종적으로 참조번호가 0이 되면 쓰레드는 자동으로 없어지게 됩니다.(마치 dll처럼여.)

 

그래서 쓰레드를 만들자 마자 CloseHandle(hThread)해서 참조 카운드를 하나 줄여주는 겁니다.

 

그리고 쓰레드 (커널 객체)는 핸들로 사용하는게 아니고 쓰레드의 아뒤(ID)를 이용해서 참조합니다.쓰레드 핸들을 정확히 얻었다고 해서 그 핸드를 이용해서 쓰레드를 사용할 순없을 겁니다.

 

마찬가지고 프로세스(커널 객체)도 핸들을 이용해서 사용하는게 아니라 아뒤를 이용해야 할겁니다.

Comments