跨平台实时获取CPU空闲占比需条件编译:Windows用PDH查询“% Idle Time”计数器;Linux解析/proc/stat中idle+iowait与总时间比值;macOS调用host_processor_info累加各核idle时间占比。

如果您需要在 C++ 程序中实时获取系统当前空闲 CPU 时间占比,并确保代码能在 Windows、Linux 和 macOS 上运行,则需借助各平台原生性能接口并进行条件编译封装。以下是三种主流平台下的具体实现方法:
一、Windows 平台:使用 PDH 接口查询 Processor Information
Windows 提供了性能数据助手(PDH)API,可通过访问 "\Processor(_Total)\% Idle Time" 计数器直接获取整体 CPU 空闲时间百分比,精度高且无需管理员权限。
1、包含必要头文件:#include
2、调用 PdhOpenQuery 创建性能查询句柄。
3、使用 PdhAddCounter 添加 "\Processor(_Total)\% Idle Time" 计数器。
4、执行 PdhCollectQueryData 刷新一次采样数据。
5、调用 PdhGetFormattedCounterValue 获取 FLOAT 类型的空闲占比值。
6、最后调用 PdhCloseQuery 释放资源。
二、Linux 平台:解析 /proc/stat 文件计算空闲时间比例
Linux 内核通过 /proc/stat 暴露 CPU 时间统计,其中第一行以 "cpu " 开头的字段包含 user、nice、system、idle、iowait、irq、softirq 等累加值;空闲时间占比等于 idle 与 iowait 之和除以所有时间字段总和。
1、以只读方式打开 /proc/stat 文件。
2、逐行读取,定位首行为 "cpu "(注意末尾空格)的行。
3、使用 sscanf 解析前七个无符号长整型字段,分别对应 user、nice、system、idle、iowait、irq、softirq。
4、计算总时间 = user + nice + system + idle + iowait + irq + softirq。
5、计算空闲时间 = idle + iowait。
6、空闲占比 = (double)空闲时间 / 总时间 * 100.0。
三、macOS 平台:调用 host_processor_info 获取 CPU 状态
macOS 使用 Mach API 的 host_processor_info 函数获取每个处理器核心的 CPU 时间元组,其中第三个字段为 system 时间、第四个为 idle 时间;对多核求和后可得全局空闲占比。
1、包含头文件:#include
2、声明变量:host_t host = mach_host_self();processor_cpu_load_info_t cpu_load;mach_msg_type_number_t load_count;natural_t processor_count。
3、调用 host_processor_info,传入 host、PROCESSOR_CPU_LOAD_INFO、&processor_count、(processor_info_array_t*)&cpu_load、&load_count。
4、遍历 processor_count 个结构体,累加每个结构体的 cpu_ticks[CPU_STATE_IDLE] 与 cpu_ticks[CPU_STATE_SYSTEM] 等字段。
5、空闲时间总和除以所有状态时间总和(user + system + idle + nice),乘以 100 得到百分比。
6、调用 vm_deallocate 释放 cpu_load 分配的内存。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











