2011-08-02 7 views
1

내가 이런 스레드가 "작동"실행중인 스레드를 종료제대로

DWORD thread_id; 
CreateThread(0, 0, message_loop_thread, 0, 0, &thread_id); 

이 작동하는 것 같다,하지만 내가 어떻게 올바르게 할 수 이 스레드를 닫으시겠습니까? 일반적으로 스레드가 GetMessage을 기다리고 있으므로 스레드가 차단되어 있다고 생각합니다.

이렇게하는 좋은 방법이 있습니까? 나는 TerminateThread을 시도했지만, 이것이 멈추고 스레드를 멈추게하는 좋은 해결책이 아닌 것 같습니다.

누구에게 아이디어가 있습니까?

안부 Benj 마이어

+0

당신이하지 않는 것을 알지 못하면'CreateThread()'를 사용하지 마십시오. 'CreateThread()'는 런타임을 올바르게 초기화하지 않으며, 스레드가 죽을 때 실행할 CRT 마무리 화 후크를 설정하지 않습니다. 여기 토론을 참조하십시오 : http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c –

답변

3

적절한 방법은 thread_idWM_QUIT을 게시하는 것입니다. 이 경우 PostThreadMessage()을 사용합니다. 이에 대한 응답으로 GetMessage은 0을 반환하고 while 루프가 종료되고 함수가 종료됩니다 (잘못하여 return 문이 누락 됨). 스레드의 최상위 기능이 종료되면 스레드가 종료됩니다.

+0

이것은 효과가 있습니다. 감사. –