WSP27

LJM·2023년 8월 17일
0

컴퓨터지식

목록 보기
28/41

WaitForSingleObject 함수의 유용성

WaitForSingleObject 호출하면 부모프로세스는 자식프로세스가 종료될 때까지 기다리는 효과를 얻게 된다. 프로세스의 커널 오브젝트는 생성과 동시에 Non-Signaled 상태가 된다 부모가 WaitForSingleObject 함수 호출하면 이 함수는 블로킹 상태에 놓인다 부모프로세스는 더이상 실행된지 않고 함수의 블로킹 상태에서 빠져나오기만을 기다리는 것이다. 자식 프로세스가 종료되면, 자식 프로세스의 커널 오브젝트는 Signaled 상태가 된다 WaitForSingleObject 함수를 호출한 부모 프로세스는 블로킹 상태를 빠져 나와서 나머지 부분을 실행한다

AdderManager.cpp

int _tmain(int argc, TCHAR* argv[])

STARTUPINFO si1 = {0,};
STARTUPINFO si2 = {0,};

PROCESS_INFORMATION pi1;
PROCESS_INFORMATION pi2;

DWORD return_val1;
DWORD return_val2;

TCHAR command1[] = _T("PartAdder.exe 1 5");
TCHAR command2[] = _T("PartAdder.exe 6 10");

DWORD sum = 0;

si1.cb=sizeof(si1);
si2.cb=sizeof(si2);

CreateProcess(NULL, command1, NULL, NULL, TRUE, 0, NULL, NULL, &si1, &pi1);

CreateProcess(NULL, command2, NULL, NULL, TRUE, 0, NULL, NULL, &si1, &pi2);

CloseHandle(pi1.hThread);
CloseHandle(pi2.hThread);

WaitForSingleObject(pi1.hProcess, INFINITE);
WaitForSingleObject(pi2.hProcess, INFINITE);

GetExitCodeProcess(pi1.hProcess, &return_val1);
GetExitCodeProcess(pi2.hProcess, &return_val2);

if(return_val1==-1 || return_val2==-1)
	return -1;
    
sum+=return_val1;
sum+=return_val2;

_tprintf(_T("total : %d \n"), sum);

CloseHandle(pi1.hProcess);
CloseHandle(pi2.hProcess);
return 0;
profile
게임개발자 백엔드개발자

0개의 댓글