글 수 83
>ExitThread( hThread[1]);
>
>terminateThread는 잘 종료가 되는데
>위의 함수는 프로그램의 종료뒤에도 계속 쓰레드가 돌아갑니다.
>
>
TerminateThread()는 스레드를 강제 종료하는 함수입니다.정말 꼭 필요한 경우가 아니면 사용해선 안되는 함수입니다.스레드마다 생성되는 스텍을 비롯한 리소스를 해제할수 없으며 비정상 종료이므로 리턴값 체크또한 불가합니다.
ExitThread()는 외부에서 특정 스레드를 종료시킬때 쓰는 함수가 아닙니다.애초에 스레드는 스스로 종료해야합니다.외부에서 종료시키는게 아닙니다.
ExitThread()에 들어가는 인자는 스레드 핸들이 아니고 DWORD형 값입니다.
즉 스레드 함수의 리턴값을 주는것입니다.실제로 스레드 프로시져에서 ExitThread()를 호출하는 대신 return 리턴값; 해도 됩니다.
VC++에서 main()을 사용하는 간단한 어플리케이션을 만들고 디버그모드로 실행했다가 종료해보면 VC++ 디버그 창에 0혹은 기타 리턴값으로 종료했다고 나오는데 이것과 같은것입니다.main()함수도 하나의 스레드니까요.
스레드를 깨끗하게 종료시키기 위해서 다음과 같은 예제를 참고하시기 바랍니다.
DWORD WINAPI ThreadProc(LPVOID lpVoid)
{
DWORD dwEventIndex;
while(1)
{
// 미리 만들어둔 이벤트 객체 두개를 대기하고 있다가 0번 이벤트
// 가 시그널 되면 종료하기로합니다.
dwEventIndex = WaitForMultipleObjects(g_hEvent,2,INFINITE);
if (dwEventIndex == 0)
goto lb_return;
}
lb_return:
// 이 부분에서 스레드가 정상종료합니다.
// 이 스레드의 exit code(리턴값)으로 0을 주기로합시다.
return 0;
}
실제 컴파일해서 올린게 아니고 편집기 상에서 그냥 생각해서 써넣은거라 몇자 틀렸을수 있습니다.코드 세세하게 따지지 마시고 어떻게 종료하는지 흐름을 보시기 바랍니다.
>
>terminateThread는 잘 종료가 되는데
>위의 함수는 프로그램의 종료뒤에도 계속 쓰레드가 돌아갑니다.
>
>
TerminateThread()는 스레드를 강제 종료하는 함수입니다.정말 꼭 필요한 경우가 아니면 사용해선 안되는 함수입니다.스레드마다 생성되는 스텍을 비롯한 리소스를 해제할수 없으며 비정상 종료이므로 리턴값 체크또한 불가합니다.
ExitThread()는 외부에서 특정 스레드를 종료시킬때 쓰는 함수가 아닙니다.애초에 스레드는 스스로 종료해야합니다.외부에서 종료시키는게 아닙니다.
ExitThread()에 들어가는 인자는 스레드 핸들이 아니고 DWORD형 값입니다.
즉 스레드 함수의 리턴값을 주는것입니다.실제로 스레드 프로시져에서 ExitThread()를 호출하는 대신 return 리턴값; 해도 됩니다.
VC++에서 main()을 사용하는 간단한 어플리케이션을 만들고 디버그모드로 실행했다가 종료해보면 VC++ 디버그 창에 0혹은 기타 리턴값으로 종료했다고 나오는데 이것과 같은것입니다.main()함수도 하나의 스레드니까요.
스레드를 깨끗하게 종료시키기 위해서 다음과 같은 예제를 참고하시기 바랍니다.
DWORD WINAPI ThreadProc(LPVOID lpVoid)
{
DWORD dwEventIndex;
while(1)
{
// 미리 만들어둔 이벤트 객체 두개를 대기하고 있다가 0번 이벤트
// 가 시그널 되면 종료하기로합니다.
dwEventIndex = WaitForMultipleObjects(g_hEvent,2,INFINITE);
if (dwEventIndex == 0)
goto lb_return;
}
lb_return:
// 이 부분에서 스레드가 정상종료합니다.
// 이 스레드의 exit code(리턴값)으로 0을 주기로합시다.
return 0;
}
실제 컴파일해서 올린게 아니고 편집기 상에서 그냥 생각해서 써넣은거라 몇자 틀렸을수 있습니다.코드 세세하게 따지지 마시고 어떻게 종료하는지 흐름을 보시기 바랍니다.