8

WaitForSingleObjectそれを使用しないのではなく、ここで使用する利点は何ですか? コードの最初のブロックは、以前の回答からのものです。2番目のブロックは、私がやっている方法です。

BOOL IsProcessRunning(DWORD pid)
{
    HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid);
    DWORD ret = WaitForSingleObject(process, 0);
    CloseHandle(process);
    return (ret == WAIT_TIMEOUT);
}

BOOL IsProcessRunning(DWORD pid)
{
   HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
   const bool exists = (process != NULL);
   CloseHandle(process);
   return exists;
}

SYNCHRONIZEを使用するにはより高い権限が必要なようで、現在のユーザーの PID のみを確認したいのです。

4

3 に答える 3

12

プロセスが完了すると、実行は停止しますが、そのプロセスへの最後のハンドルが閉じられるまで存在しなくなりません。最初のソリューションは、これら 2 つの状態 (実行中または実行完了) を区別します。もちろん、答えが戻ってくる頃には時代遅れになっている可能性があります。

その区別が必要ない場合は、あなたのアプローチで問題ありません (ただし、DoesProcessExist のような名前を関数に付けます)。

于 2012-10-15T16:51:27.177 に答える
1

IsProcessRunning の実装では、GetExitCodeProcess Win32 API も使用できます。

于 2014-01-06T11:34:50.920 に答える
-2

WaitForSingleObject は、プロセスが完了するか終了するまで待機します。そうして初めて、それは戻ってきます。

于 2012-10-15T16:42:51.300 に答える