- ベストアンサー
プロセスが終了されたかどうか調べる関数を教えてください。
まずは下のC++のソースをご覧ください。 ------------------------------------------------ PROCESS_INFORMATION ProcessInfo; STARTUPINFO StartupInfo = { 0 }; printf ("Start of Proc\n"); CreateProcess ( NULL, "c:\proc01.exe", NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo) printf ("End of Proc\n"); ------------------------------------------------ この処理でCreateProcessで指定された"c:\proc01.exe"が起動されて 終了した時に、下のprintf()関数が実行されるのようにしたいのですが、 そのような処理をするAPI関数、またはC++関数をご存知ないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
WaitForSingleObject(...)を使ってみてください。 CreateProcess()の最後の引数であるProcessInfo構造体のhProcessを WaitForSingleObject()に渡してやります。 例: 以下は、StartupInfoおよびProcessInfoが正常に確保・初期化されていることが 前提です。確保・初期化されていなければ希望の動作はしません。 ... printf ("Start of Proc\n"); CreateProcess ( NULL, "c:\proc01.exe", NULL, NULL, FALSE, 0, NULL, NULL, &StartupInfo, &ProcessInfo); // proc01.exe起動待ち // proc01.exeがシグナル状態になるのを待ちます // 状況によっては省略化 WaitForSingleObject(ProcessInfo.hProcess, INFINITE); // proc01.exe終了待ち // 上の逆で、proc01.exeが非シグナル状態になるのを待ちます while(1) { if(WaitForSingleObject(ProcessInfo.hProcess, 1)!=WAIT_OBJECT_0) break; } printf ("End of Proc\n"); ... 各関数の詳細は、VC++オンラインヘルプ(MSDN)で確認してください。 PS FindWindow(...)を使う手もあります。