API

전역 스레드 핸들을 다룰시 유의사항

디버그정 2010. 3. 16. 12:56

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값으로 하지 않았으니)
이 핸들번호는 새로 생성한 스레드에 할당될 가능성이 크므로,
멀쩡히 실행되던 스레드가 종료되버리는 결과가 자주 생겼다.