使用WaitForSingleObject
此处而不是不使用它有什么好处?第一个代码块来自之前的答案.第二个块是我如何做到这一点.
BOOL IsProcessRunning(DWORD pid)
{
HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid);
DWORD ret = WaitForSingleObject(process, 0);
CloseHandle(process);
return (ret == WAIT_TIMEOUT);
}
Run Code Online (Sandbox Code Playgroud)
VS
BOOL IsProcessRunning(DWORD pid)
{
HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
const bool exists = (process != NULL);
CloseHandle(process);
return exists;
}
Run Code Online (Sandbox Code Playgroud)
似乎使用SYNCHRONIZE需要更高的权限,我只想检查当前用户的PID.
当一个进程完成时,它会停止运行,但在它的最后一个句柄关闭之前它不会消失.第一个解决方案区分这两种状态(仍在运行或已完成运行).当然,答案可能在它返回时已经过时.
如果你不需要这种区别,那么你的方法很好(虽然我会将函数命名为DoesProcessExist).