外部プロセスを同期実行する方法【Windows API】

特定のプログラムを実行し、そのプロセスが終了するまで待機します プログラムを順次起動していきたい場合のバッチ処理として使用することができます。 GUIアプリケーションで実行した場合は待機中の画面の更新が行われません。 必要に応じて別スレッドで待機するなどの処理が必要になります。

// プロセスの同期実行
//
// [引数]
// szFileName : ファイル名
//
// [返値]
// 成功した場合 : TRUE
// 失敗した場合 : FALSE

BOOL CreateProcessSync(char *szFileName)
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si;

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

    int nRet = CreateProcess(
            NULL, (LPTSTR)szFileName, NULL, NULL, FALSE,
            NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi
            );

    if (nRet == 0) // 起動に失敗した場合
        return FALSE;

    // 起動したプロセスが終了するまで待機
    while (WaitForSingleObject(pi.hProcess, 0) != WAIT_OBJECT_0) {
        Sleep(100);
    }

    return FALSE;
}

 

Windows API

Posted by @erestage