检查进程是否永久运行

问题描述 投票:0回答:1

我目前正在 cpp 中制作一个应用程序,我需要不断检查 2 个应用程序是否正在运行,我得到了一个解决方案,但它有点糟糕,因为我每 4 毫秒运行一次该函数,有问题的函数,顺便说一句我知道应用程序的名称:

void inline isProcessRunning() {
PROCESSENTRY32 entry{};
entry.dwSize = sizeof(PROCESSENTRY32);

HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry))
    while (Process32Next(snapshot, &entry)) {
        if (!wcsicmp(entry.szExeFile, L"App1.exe")) {
            Do something...

        }
        if (!wcsicmp(entry.szExeFile, L"App2.exe")) {
            do something...
        }
    }
CloseHandle(snapshot);
}

此函数的问题在于其执行的系统调用量,因此我的应用程序 CPU 使用率有时会在通常为 0% 时跳跃,我想知道是否有一种方法可以刷新快照而无需创建另一个快照或另一种检查进程是否正在运行的方法。

提前致谢

尝试过使用快照,但性能不佳

c++ winapi
1个回答
0
投票

我想知道是否有一种方法可以刷新快照而无需创建另一个快照

不,没有。

或另一种检查进程是否正在运行的方法

一旦检测到给定进程正在运行,请停止轮询它。相反,只需获取其 PID,然后使用 OpenProcess()

打开该进程
,并使用任何
WaitFor...()
函数等待它。这会告诉您该进程何时关闭。然后您可以开始轮询它以再次开始运行(或者更好的是,使用一个钩子来告诉您新进程何时开始)。

© www.soinside.com 2019 - 2024. All rights reserved.