::TerminateThread(핸들, exitcode);
MFC에서 API 함수를 불러와야 하기 때문에 앞에 :: 를 붙여주고, 강제종료하고자 하는 스레드의 핸들을 넘겨주면 된다. exitcode는 아무값이나 상관없음. 쓸경우엔 알아서 의미있는 값으로.
이 함수의 문제점은 스레드 내의 어떠한 데이터도 해제하지 않고, 그냥 스레드를 종료시킨다는 점으로, 메모리 누수가 일어날 수 있다. 그러므로 가급적 사용하지 말아야 하지만, 만약 스레드 내에 동적 메모리 등등의 메모리 누수가 될 점이 없다면 사용해도 되지 않을까?(본인 생각)
::TerminateThread()를 써준후, CloseHandle()을 하여 꼭 핸들을 닫아주어야 한다. 스레드의 핸들을 닫아주어 쓸때없는 참조카운터를 줄여주어 메모리 누수를 방지한다.
아무튼 중요한 것은 이 함수말고 대안이 없다면 쓰되.........가능한 쓰지 말기를 권유하는 함수이다.
나에겐 나름 유용한 함수였음.
추가
TermianteThread를 호출한 후에 종료한 스레드 객체도 해제 시켜줘야 한다. TerminateThread는 스레드 핸들을 상대로 하기 때문에 객체는 그대로 남아있게 된다. 그래서 delete pThread; 이런식으로 스레드 객체를 해제 시켜줘야 한다.
그리고 정상적으로 종료된 스레드라면 CloseHandle() 함수를 호출할 필요는 없다. 스레드 객체가 해제되면서 자동으로 CloseHandle이 불리기 때문이다.
댓글 없음:
댓글 쓰기