Thread
- 이전의 WaitForSingleObject를 이용하여 Event가 Set 되기를 기다린다면, Main Thread가 Wait 상태에 빠지게 되므로 다른 프로세스를 생성해 Set을 해주어야 함
- WaitForSingleObject를 수행하는 새로운 Thread를 생성한다면, 하나의 프로세스에서 Event를 Wait하고 Set할 수 있게 됨
HANDLE m_hEvent = NULL;
void createEvent()
{
CloseHandle(m_hEvent);
m_hEvent = ::CreateEvent(NULL, TRUE, FALSE, L"TEST_EVENT");
if (m_hEvent == NULL) {
if (GetLastError() == ERROR_ALREADY_EXISTS) {
m_hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, L"TEST_EVENT");
if (m_hEvent == NULL) {
AfxMessageBox(L"ERROR: Failed to create event object.");
return;
}
}
return;
}
}
DWORD WINAPI waitEventThread(LPVOID pParam)
{
HANDLE hEvent = pParam;
if (WaitForSingleObject(hEvent, INFINITE) == WAIT_OBJECT_0)
{
AfxMessageBox(L"Set Update Event");
}
AfxMessageBox(L"Thread Return");
return 0;
}
void waitEvent()
{
CreateThread(NULL, 0, waitEventThread, m_hEvent, 0, NULL);
}
void setEvent()
{
SetEvent(m_hEvent);
Sleep(300);
ResetEvent(m_hEvent);
}