스레드 종료 기능을 사용하려면 이벤트를 기다리거나 루프를 입력해야합니다. 해당 함수가 종료되면 스레드가 종료됩니다.
예를 들어 사용자가 Windows 이벤트 API 사용할 수 있습니다
void foo(){
// The Event exitSessionEvent must be declared somewhere where the controlling
// thread can access it. This might be a global event for example (in a namespace).
// You must initialise it using CreateEvent.
CInternetSession session(_T("Session"));
// ... do some stuff ....
WaitForSingleObject(exitSessionEvent, INFINITE);
session.Close(); //Done so cleanup
}
을 이제 스레드 함수는 종료하지 않습니다 이벤트 "exitSessionEvent는"(다른 사람) 설정 될 때까지를 것이다.
또한 어떤 종류의 플래그를 사용할 수 있으며 while(flag)
루프가 있지만 이벤트는 내가 생각하는 다중 스레드 응용 프로그램에서 자신을 표현하는 명확한 방법입니다.
또한 스레드를 생성 한 스레드는 끝내기를 기다리지 않는 한 스레드를 닫은 스레드가 아니어야합니다. 스레드의 핸들을 닫기 전에 새 스레드가 끝나기를 기다리는 것처럼 보이지 않습니다. 다시 이벤트를 사용하는 경우 당신은이 작업을 수행 할 수 : 스레드가 핸들을 닫기 전에 끝날 때까지 기다립니다
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex(NULL, 0, &foo, NULL, 0,NULL);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
합니다.
이벤트 API를 사용하지 않아도 작동합니다. _beginthreadex 뒤에 WaitForSingleObject (hThread, INFINITE) 만 추가했습니다. 답변 해 주셔서 감사합니다. – alinaish
@alinaish - 좋습니다. WaitForSingleObject는 "이벤트 API"의 일부입니다. :) 답변으로 표시 할 수 있다면 어떻게 도움이 되었는가를 생각해 봅니다. – Dennis