首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ GetProcessTimes()不会随时间改变值

C++ GetProcessTimes()不会随时间改变值
EN

Stack Overflow用户
提问于 2020-07-07 06:59:47
回答 1查看 280关注 0票数 1

我正在编写一个C++函数,以获得特定进程在Windows中的CPU使用情况。

许多参考资料(如)建议使用函数GetProcessTimes来实现。

但是,我尝试了一个示例程序,但是KernelTimeUserTime的值并没有随时间而改变。

下面是我的代码:

代码语言:javascript
复制
#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);
    }

}

我检查的进程是一个正在运行的Virtualbox进程,它总是占用CPU的大约20%。

但是,当我运行示例代码时,结果如下:

代码语言:javascript
复制
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0

有时,它可能会产生以下结果:

代码语言:javascript
复制
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0
312500 : 0

同样,它可能会产生以下结果:

代码语言:javascript
复制
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0
156250 : 0

也可能是:

代码语言:javascript
复制
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250
0 : 156250

以此类推,但"0:0“的值更频繁。

我的代码有什么问题吗?这样它就不能获得进程的内核/空闲时间?为什么值不随时间变化?

=======

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-07 07:06:41

您正在查询当前进程(GetCurrentProcess())的时间,而不是目标进程(processHandle)的时间。因为GetProcessTimes()返回进程消耗的CPU时间,但是您的进程并没有花费太多的时间,因为它大多处于休眠状态,所以结果的变化非常缓慢。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62769697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档