8

WaitForSingleObject在这里使用与不使用相比有什么好处?第一个代码块来自上一个答案。第二块是我的做法。

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

当一个进程完成时,它会停止运行,但它不会消失,直到它的最后一个句柄关闭。第一个解决方案区分这两种状态(仍在运行或已完成运行)。当然,当它返回时,答案可能已经过时了。

如果您不需要这种区别,那么您的方法很好(尽管我会将函数命名为 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 回答