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