모든 윈도우에서 사용되는 리소스는 커널오브젝트라는 것을 가진다.
이 커널 오브젝트는 2가지 상태값을 가지게 되는데, 시그널 상태와 논시그널 상태이다.
CreateEvent함수는 개체를 시그널 or 논시그널로 핸들을 생성할 수 있다.
그리고 WaitForSingleObject함수로 CreateEvent에서 생성한 핸들이 시그널이 될때까지 기다리게 할 수 있다.
SetEvent는 핸들의 시그널 값을 논시그널에서 시그널로 바꿔주는 역할을 한다.
예제>
HANDLE WowEvent;
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
Sleep(5000);
SetEvent( WowEvent ); // 3) 5초후 WowEvent 시그널 상태로 변경한다.
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD ID = 0;
CreateThread(NULL, 0, ThreadProc, NULL, 0, &ID);
WowEvent = CreateEvent(0, FALSE, FALSE, 0); // 1) WowEvent를 논시그널 상태로 생성한다.
WaitForSingleObject(WowEvent, INFINITE); // 2) WowEvent가 시그널 상태로 되기를 기다린다.
// 4) WaitForSingleObject를 빠져나온다.
return 0;
}