gpt4 book ai didi

c++ - 如何获取程序状态(停止工作)

转载 作者:行者123 更新时间:2023-11-28 00:11:40 25 4
gpt4 key购买 nike

我正在使用 VS C++ 2010。我需要获取程序状态,但似乎当程序说它停止工作时,我的功能不起作用。如果它停止工作,我需要它来重新启动程序。

我的代码:

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

最佳答案

此代码永远行不通。如果外部进程已停止运行,则 OpenProcess 将失败,因为进程已结束且 PID 不再有效。而且您不检查 OpenProcess 返回的值。或者 PID 已被重新使用,然后您将处理错误的进程。

要以可靠的方式使用WaitForSingleObject,您需要获取进程的句柄并卡在它上面。调用 OpenProcess 一次,然后使用该句柄进行对 WaitForSingleObject 的所有后续调用。仅当您完成处理该进程时才调用 CloseHandle

但是,您对 WaitForSingleObject 的使用对于检测程序是否没有响应根本没有用。在这种情况下,对 OpenProcess 的调用将会成功,因为该进程仍然存在并且正在运行。对 WaitForSingleObject 的调用返回 WAIT_TIMEOUT,因为进程仍在运行。毕竟,挂起的进程仍在运行。

所以你的代码的整个前提都是错误的。挂起的窗口(或者实际上是任何窗口)只能存在于正在运行的进程中!您将需要丢弃现有的代码,而只需调用 IsHungAppWindow .您将需要应用程序主窗口的窗口句柄。

关于c++ - 如何获取程序状态(停止工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com