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);
}

'💻 Computer Science > System' 카테고리의 다른 글

[System] High-Level File I/O  (1) 2024.01.24
[System] Low-Level File I/O  (1) 2024.01.23
[System] Event  (0) 2024.01.03
[System] WaitForSingleObject  (0) 2024.01.03
[System] 윈도우 프로세스 생성  (1) 2024.01.03