c++ - 检查进程 ID 时使用 WaitForSingleObject 的好处

标签 c++ winapi pid

与不使用相比,在这里使用 WaitForSingleObject 有什么好处?第一个代码块来自 previous answer .第二个障碍是我是如何做的。

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。

最佳答案

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

如果您不需要这种区别,那么您的方法就可以了(尽管我会将该函数命名为类似 DoesProcessExist 的名称)。

关于c++ - 检查进程 ID 时使用 WaitForSingleObject 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12900036/

相关文章:

c++ - Cereal/C++ 11 - 如何为反序列化指定可选参数

wpf - Windows 应用商店中的非 UWP 应用如何?

c - 如何使用等待();在一个进程中,以等待其子进程首先被执行

c++ - 如何杀死旧的父进程?

python - 确定(Windows)上是否存在 PID 的快速方法?

c++ - 无法解析的 `R_X86_64_NONE` 重定位

c++ - 对有限数量的命令进行快速语音识别

c++ - 如何在我的特定代码中实现动态位集

c++ - 如何确定 C++ 控制台应用程序中的当前键盘语言?

c - 系统托盘中的 Windows 服务消息