C++;GetProcessTimes()的值不会随时间变化 我编写了一个C++函数,以获得Windows中特定进程的CPU使用率。 许多参考文献(如)建议使用函数来实现。 但是,我尝试了一个示例程序,但是KernelTime和UserTime的值没有随着时间的推移而改变。下面是我的代码: #include <iostream> #include <Windows.h> int main() { int processID = 14532; HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processID); if (processHandle == NULL) { return -1; } FILETIME ftProcCreation, ftProcExit, ftProcKernel, ftProcUser; for (int i = 0; i < 10; i++) { if (!GetProcessTimes(GetCurrentProcess(), &ftProcCreation, &ftProcExit, &ftProcKernel, &ftProcUser)) { return -1; } LARGE_INTEGER lKernel, lUser; lKernel.LowPart = ftProcKernel.dwLowDateTime; lKernel.HighPart = ftProcKernel.dwHighDateTime; lUser.LowPart = ftProcUser.dwLowDateTime; lUser.HighPart = ftProcUser.dwHighDateTime; printf("%lld : %lld\n", lKernel.QuadPart, lUser.QuadPart); Sleep(250); } }

C++;GetProcessTimes()的值不会随时间变化 我编写了一个C++函数,以获得Windows中特定进程的CPU使用率。 许多参考文献(如)建议使用函数来实现。 但是,我尝试了一个示例程序,但是KernelTime和UserTime的值没有随着时间的推移而改变。下面是我的代码: #include <iostream> #include <Windows.h> int main() { int processID = 14532; HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, processID); if (processHandle == NULL) { return -1; } FILETIME ftProcCreation, ftProcExit, ftProcKernel, ftProcUser; for (int i = 0; i < 10; i++) { if (!GetProcessTimes(GetCurrentProcess(), &ftProcCreation, &ftProcExit, &ftProcKernel, &ftProcUser)) { return -1; } LARGE_INTEGER lKernel, lUser; lKernel.LowPart = ftProcKernel.dwLowDateTime; lKernel.HighPart = ftProcKernel.dwHighDateTime; lUser.LowPart = ftProcUser.dwLowDateTime; lUser.HighPart = ftProcUser.dwHighDateTime; printf("%lld : %lld\n", lKernel.QuadPart, lUser.QuadPart); Sleep(250); } },c++,windows,C++,Windows,有时,它可能会给出以下结果: 312500 : 0 312500 : 0 312500 : 0 312500 : 0 312500 : 0 312500 : 0 312500 : 0 312500 : 0 312500 : 0 312500 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 156250 : 0 同样,它可能会给出以下结果

有时,它可能会给出以下结果:

312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
同样,它可能会给出以下结果:

312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
或者可能是:

0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
以此类推,但“0:0”的值更频繁。
我的代码是否有任何错误,以致无法获得进程的内核/空闲时间?为什么该值不随时间变化


====

您查询的是当前进程(
GetCurrentProcess()
)的时间,而不是目标进程(
processHandle
)。由于
GetProcessTimes()
返回进程所消耗的CPU时间,但由于进程主要处于睡眠状态,因此不会消耗太多时间,因此结果变化非常缓慢


因此,将
processHandle
而不是
GetCurrentProcess()
传递到
GetProcessTimes()
您正在查询的是当前进程的时间(
GetCurrentProcess()
),而不是目标进程(
processHandle
)。由于
GetProcessTimes()
返回进程所消耗的CPU时间,但由于进程主要处于睡眠状态,因此不会消耗太多时间,因此结果变化非常缓慢

因此,将
processHandle
而不是
GetCurrentProcess()
传递到
GetProcessTimes()