천객만래 [千客萬來] (It has an interminable succession of visitors)

'WaitForSingleObject'에 해당되는 글 1건

  1. 2011.02.16 [개발/VC++] 외부프로그램 실행완료 기다리기
[개발/VC++] 외부프로그램 실행완료 기다리기 또는 종료 기다리기

Windows 환경에서 외부 프로그램을 부를 때 종종 ShellExcute 혹은 ShellExcuteEx 또는 WinExec 를 사용한다.

가장 사용방법이 간단한건 ShellExcute와 WinExec 가 있는데 이걸 사용하면 호출한 프로세스가 언제 끝나는지 알 수가 없다. 언제 끝나는지 아는게 중요한 것이 다음과 같은 경우이다. C#에서는 Process 클래스를 사용하면 쉽다.

외부 프로그램이 데이터를 공유하거나 실행순서가 중요할 때에 필요한 방법을 알아보자.
그렇다면 먼저 실행하는 외부프로그램이나 실행하려는 외부프로그램이 종료나 끝나기를 기다려야 하는 경우를 살펴보자.

이를 해결하기 위해서는, First.exe 가 다 끝날때가지 그 다음 코드를 실행하는 것을 멈춰야 한다.
이를 ShellExcuteInfo 를 이용해서 구현해보자

SHELLEXECUTEINFO lpExecInfo;
 lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
 lpExecInfo.lpFile =  "First.exe";
 lpExecInfo.fMask= SEE_MASK_NOCLOSEPROCESS;
 lpExecInfo.hwnd = NULL;
 lpExecInfo.lpVerb = NULL;
 lpExecInfo.lpParameters = "";
 lpExecInfo.lpDirectory = NULL;
 lpExecInfo.nShow = SW_SHOW;
 lpExecInfo.hInstApp = (HINSTANCE) SE_ERR_DDEFAIL; //WINSHELLAPI BOOL WINAPI result;

 int success = ShellExecuteEx(&lpExecInfo);
 WaitForSingleObject(lpExecInfo.hProcess, INFINITE);   // 여기서 계속 기다리게 셋팅하는 것이다.





Posted by SB패밀리