C++获取CPU使用率

先上代码

#include <Windows.h>
#include <iostream>

int main() {
    FILETIME idleTime, kernelTime, userTime;//FILETIME表示时间的结构体,64位值,想知道细节的百度
    ULARGE_INTEGER lastIdleTime, lastKernelTime, lastUserTime;
    double cpuUsage;

    while (true) {
        // 获取系统时间信息
        if (!GetSystemTimes(&idleTime, &kernelTime, &userTime)) {
            std::cerr << "Failed to get system times." << std::endl;
            return 1;
        }

        // 将FILETIME结构转换为ULARGE_INTEGER
        memcpy(&lastIdleTime, &idleTime, sizeof(FILETIME));
        memcpy(&lastKernelTime, &kernelTime, sizeof(FILETIME));
        memcpy(&lastUserTime, &userTime, sizeof(FILETIME));

        // 等待一段时间
        Sleep(1000); // 1秒

        // 再次获取系统时间信息
        if (!GetSystemTimes(&idleTime, &kernelTime, &userTime)) {
            std::cerr << "Failed to get system times." << std::endl;
            return 1;
        }

        // 计算CPU使用率
        ULARGE_INTEGER currentIdleTime, currentKernelTime, currentUserTime;
        memcpy(&currentIdleTime, &idleTime, sizeof(FILETIME));
        memcpy(&currentKernelTime, &kernelTime, sizeof(FILETIME));
        memcpy(&currentUserTime, &userTime, sizeof(FILETIME));

        // 计算时间间隔
        ULONGLONG idleDelta = currentIdleTime.QuadPart - lastIdleTime.QuadPart;
        ULONGLONG kernelDelta = currentKernelTime.QuadPart - lastKernelTime.QuadPart;
        ULONGLONG userDelta = currentUserTime.QuadPart - lastUserTime.QuadPart;
        ULONGLONG totalDelta = kernelDelta + userDelta;

        // 计算CPU使用率
        cpuUsage = (1.0 - static_cast<double>(idleDelta) / totalDelta) * 100.0;

        std::cout << "CPU Usage: " << cpuUsage << "%" << std::endl;
    }

    return 0;
}

代码关键:
GetSystemTimes函数:检索系统计时信息。 在多处理器系统上,返回的值是所有处理器中指定时间的总和。
语法

BOOL GetSystemTimes(
  [out, optional] PFILETIME lpIdleTime,
  [out, optional] PFILETIME lpKernelTime,
  [out, optional] PFILETIME lpUserTime
);

语法解释:将信息存储进传入的三个参数之中
[out, optional] lpIdleTime
指向 FILETIME 结构的指针,该结构接收系统处于空闲状态的时间量。

[out, optional] lpKernelTime
指向 FILETIME 结构的指针,该结构接收系统在内核模式下执行所花费的时间, (包括所有进程、所有处理器) 上的所有线程。 此时间值还包括系统处于空闲状态的时间量。

[out, optional] lpUserTime
指向 FILETIME 结构的指针,该结构接收系统在用户模式下执行所花费的时间, (包括所有进程、所有处理器) 上的所有线程。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值