HANDLE hThread=CreateThread~~~;
CloseHandle(hThread);
이런식으로 쓰이는데,,,
전역변수 핸들을 선언하는 경우 좀 유의해야 할 듯 하다.
HANDLE g_ahThread[64]={NULL,};
g_ahThread[index]=CreateThread~~~;
...
...
..
TerminateThread(g_ahThread[index], 0);
CloseHandle(g_ahThread[index]);
형식으로 쓰이는데.
핸들을 닫은 후 g_ahThread[index]=NULL;이라는 코딩을 해주는게 좋다.
스레드의 핸들은 조사해 보니 0x7bc 이런식으로 아주 낮은 자리수를 취하고 있었다.
어떤 스레드를 닫은 경우, 그 핸들 번호가 새로 생성된 스레드에 할당되는 일이 잦은 것 같다...
스레드 수십개짜리 생성, 제거 관련 작업을 한 적이 있는데,,,
{이전스레드 강제종료 - 새로운 스레드 생성} 하는 코딩에서 NULL 처리를 안해주면
(실시간 스레드 검사 필요때문에 여러군데서 저 코딩 적용했다.)
위 코드 두번째부터 실행시 이전 전역변수스레드핸들은 그대로 남아있으므로,(변수값을 NULL값으로 하지 않았으니)
이 핸들번호는 새로 생성한 스레드에 할당될 가능성이 크므로,
멀쩡히 실행되던 스레드가 종료되버리는 결과가 자주 생겼다.
'API' 카테고리의 다른 글
펌) Change the Tab Order of the Controls in a Dialog Box (2) | 2010.08.12 |
---|---|
멀티미디어 프로그래밍 참조 (1) | 2010.04.09 |
midi 파일 프로그래밍 참조 (1) | 2010.04.09 |
TerminateThread사용시 생존여부 판단 주의(GetExitCodeThread 사용시 리턴값 주의) (0) | 2010.03.16 |
리스트뷰(혹은 트리뷰 등등)의 배경에 그림 넣기입니다 (2) | 2009.11.05 |
[팁] 일반 윈도우에서 다이얼로그박스의 편리한 키보드 인터페이스 구현하기 (1) | 2009.10.15 |
시스템 정보 알아내기....네이버 지식인 참조 (3) | 2009.10.04 |