WaitForSingleObject

  • SingleObject가 시그널에 의해서 또는 타임아웃에 의해서 종될 때까지 기다림
  • Process의 종료 대기, Mutex 값 변화 감지, Event 객체 등에 사용하지만, 주로 Process 동기화에 사
  • 여러 개를 기다리는 WaitForMultipleObjects도 있음
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void main()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

	TCHAR szBuffer[MAX_PATH + _MAX_FNAME] = {L"notepad.exe"};

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        szBuffer,        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
    	CString strTmp;
        strTmp.Format(L"CreateProcess failed (%d).", GetLastError());
		AfxMessageBox(strTmp);
        return;
    }

    // Wait until child process exits.
	DWORD dwResult = WaitForSingleObject( pi.hProcess, 1000 ); //INFINITE
	if (dwResult == WAIT_OBJECT_O) {
    	AfxMessageBox(L"메모장이 종료됐습니다.");
    }
	else if (dwResult == WAIT_TIMEOUT) {
    	AfxMessageBox(L"타임아웃 발생!");
    }

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

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

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