c++如何获取系统CPU和内存使用情况_c++系统资源监控实现方法

答案:通过平台特定API获取CPU和内存使用率,Windows使用PDH和GlobalMemoryStatusEx,Linux读取/proc/stat和/proc/meminfo,跨平台可封装统一接口实现资源监控。

c++如何获取系统cpu和内存使用情况_c++系统资源监控实现方法

在C++中获取系统CPU和内存使用情况,需要根据操作系统选择不同的实现方式。Windows和Linux系统提供了各自的API或文件接口来监控系统资源。以下是跨平台的实现思路与具体代码示例。

Windows平台获取CPU和内存使用

Windows系统可通过调用Performance Data Helper (PDH) API 或 GetSystemInfo、GlobalMemoryStatusEx 等函数获取资源信息。

CPU使用率: 使用PDH库可以方便地读取CPU利用率。

示例代码:

#include #include #pragma comment(lib, "pdh.lib")

double GetCPULoad() {static PDH_HQUERY query = NULL;static PDH_HCOUNTER counter = NULL;if (!query) {PdhOpenQuery(NULL, 0, &query);PdhAddCounter(query, L"Processor(_Total)% Processor Time", 0, &counter);PdhCollectQueryData(query);}PdhCollectQueryData(query);PDH_FMT_COUNTERVALUE value;PdhGetFormattedCounterValue(counter, PDH_FMT_DOUBLE, NULL, &value);return value.doubleValue;}

内存使用: 使用 GlobalMemoryStatusEx 获取总内存和已用内存。

立即学习“C++免费学习笔记(深入)”;

示例代码:

#include 

void GetMemoryUsage(DWORDLONG& total, DWORDLONG& used) {MEMORYSTATUSEX memInfo;memInfo.dwLength = sizeof(memInfo);GlobalMemoryStatusEx(&memInfo);total = memInfo.ullTotalPhys / (1024 1024); // 单位:MBused = (memInfo.ullTotalPhys - memInfo.ullAvailPhys) / (1024 1024);}

Linux平台获取CPU和内存使用

Linux系统通过读取 /proc/stat 和 /proc/meminfo 文件获取CPU和内存数据。

CPU使用率: 解析 /proc/stat 中第一行(cpu总和),计算空闲时间变化率。

示例代码:

#include #include #include #include #include 

struct CpuTimes {unsigned long long user, nice, system, idle, iowait, irq, softirq;};

CpuTimes GetCpuTimes() {std::ifstream file("/proc/stat");std::string line;std::getline(file, line);std::istringstream ss(line);std::string cpu;CpuTimes times;ss >> cpu >> times.user >> times.nice >> times.system >> times.idle>> times.iowait >> times.irq >> times.softirq;return times;}

double CalculateCPULoad() {auto start = GetCpuTimes();sleep(1);auto end = GetCpuTimes();

auto idle = end.idle - start.idle;auto total = (end.user + end.nice + end.system + end.idle + end.iowait + end.irq + end.softirq) -             (start.user + start.nice + start.system + start.idle + start.iowait + start.irq + start.softirq);return 100.0 * (total - idle) / total;

}

内存使用: 读取 /proc/meminfo 中的MemTotal和MemAvailable字段。

示例代码:

void GetMemoryUsage(long& totalMB, long& usedMB) {    std::ifstream file("/proc/meminfo");    std::string line;    long total = 0, free = 0;
while (std::getline(file, line)) {    if (line.find("MemTotal") == 0) {        std::sscanf(line.c_str(), "MemTotal: %ld kB", &total);    } else if (line.find("MemAvailable") == 0) {        std::sscanf(line.c_str(), "MemAvailable: %ld kB", &free);        break;    }}totalMB = total / 1024;usedMB = (total - free) / 1024;

}

跨平台封装建议

为便于在不同系统使用,可定义统一接口:

struct SystemResource {    double cpuLoad;   // 百分比    long memoryUsed;  // MB    long memoryTotal;};

SystemResource GetSystemResource() {SystemResource res = {0};

ifdef _WIN32

res.cpuLoad = GetCPULoad();GetMemoryUsage(res.memoryTotal, res.memoryUsed);

else

res.cpuLoad = CalculateCPULoad(); // 注意:此版本需等待1秒GetMemoryUsage(res.memoryTotal, res.memoryUsed);

endif

return res;

}

若需非阻塞CPU采样,可保存上一次时间戳和CPU时间,做增量计算。

注意事项

Linux下CPU使用率需两次采样,不能单次读取获得;Windows PDH方式更实时。内存数据可直接获取。生产环境中建议将采集逻辑放入独立线程,并控制采样频率(如每秒一次)以减少开销。

基本上就这些。根据不同系统选择合适方法,结构清晰即可稳定监控资源。

以上就是c++++如何获取系统CPU和内存使用情况_c++系统资源监控实现方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1482145.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
c++中std::transform算法的使用详解 _c++ transform算法应用方法
上一篇 2025年12月19日 06:07:24
c++中的默认成员函数有哪些_编译器自动生成函数的种类与行为
下一篇 2025年12月19日 06:07:42

相关推荐

  • linux命令怎么停止

    linux命令怎么停止linux命令怎么停止linux命令怎么停止linux命令怎么停止

    Linux终端中停止命令的方法:使用快捷键:按Ctrl + C发送中断信号。使用kill命令:提供进程号即可停止指定进程。使用killall命令:根据进程名称停止符合条件的所有进程。使用pkill命令:根据进程名称或其他条件停止进程。使用xkill命令(图形环境中):强制停止图形应用程序。使用can…

    2026年9月27日 • 用户投稿
    100
  • sublime怎么处理超大日志文件_sublime超大日志文件处理技巧

    sublime怎么处理超大日志文件_sublime超大日志文件处理技巧sublime怎么处理超大日志文件_sublime超大日志文件处理技巧sublime怎么处理超大日志文件_sublime超大日志文件处理技巧sublime怎么处理超大日志文件_sublime超大日志文件处理技巧

    通过设置大文件提示阈值和关闭高亮索引功能,可提升Sublime Text处理大日志文件的性能;2. 启用只读模式并分段查看,结合外部工具拆分文件,能有效避免卡顿崩溃;3. 对于GB级日志,建议配合Less、LogExpert等专用工具使用以获得更佳效率。 Sublime Text 虽然轻量高效,但在…

    2026年9月27日 • 用户投稿
    000
  • 创维数字发布H1业绩预告,归母净利润同比预跌76%至65%

    创维数字发布H1业绩预告,归母净利润同比预跌76%至65%创维数字发布H1业绩预告,归母净利润同比预跌76%至65%创维数字发布H1业绩预告,归母净利润同比预跌76%至65%创维数字发布H1业绩预告,归母净利润同比预跌76%至65%

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 7月8日,创维数字发布半年度业绩预告称,报告期内实现归母净利润盈利4300万元至6300万元,与上年同期相比,将减少13882.37万元至11882.37万元,同比下滑76.35%至65.35%…

    2026年9月27日 • 用户投稿
    000
  • PowerShell安装及基础介绍

    PowerShell安装及基础介绍PowerShell安装及基础介绍PowerShell安装及基础介绍PowerShell安装及基础介绍

    在文章底部你的每一次随手 → 分享、点赞、在看都很重要,感谢!!! 精华推荐:精选20篇满足你对前沿理论、技术和经验总结 PowerShell定义 我们先看下PowerShell官方的定义: 启动方式 一般情况下,在win 10已经预装了PowerShell,启动方式如下: 方式一,在cmd终端,输…

    2026年9月27日 • 用户投稿
    100
  • 荣耀Magic8系列影像有惊喜 罗巍:没有任何人见过 属于绝密

    荣耀Magic8系列影像有惊喜 罗巍:没有任何人见过 属于绝密荣耀Magic8系列影像有惊喜 罗巍:没有任何人见过 属于绝密荣耀Magic8系列影像有惊喜 罗巍:没有任何人见过 属于绝密荣耀Magic8系列影像有惊喜 罗巍:没有任何人见过 属于绝密

    9月27日,荣耀终端首席影像工程师罗巍透露,荣耀magic8系列将在影像系统上实现重大飞跃。 他提到,手机摄影领域已经多年未见真正意义上的革新,而此次发布会将揭晓未来的发展方向——一项前所未有的技术路径,完全契合我之前提出的硬件投资理念,甚至超越了所有人的想象。 罗巍强调,这一创新项目自他一年前加入…

    2026年9月27日 • 用户投稿
    000
  • SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计

    SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计SpringCloud 2025微服务架构实战:实现99.99%高可用性的5个关键设计

    要实现99.99%高可用,需融合多区域部署、熔断限流、异步通信、高可用数据存储与自动化运维;通过地理冗余防止单点故障,利用Resilience4j等工具实现服务自我保护,采用消息队列解耦服务并保障最终一致性,确保数据库、缓存、消息队列集群化部署,并依托监控、日志、自动化运维实现快速恢复,构建具备韧性…

    2026年9月27日 • 用户投稿
    000
  • 智能客服真的能7×24小时响应?晓多XPT大模型如何实现淘宝/京东咨询秒回?淘宝/京东咨询秒回!揭秘晓多XPT大模型如何实现7×24小时智能响应

    智能客服真的能7×24小时响应?晓多XPT大模型如何实现淘宝/京东咨询秒回?淘宝/京东咨询秒回!揭秘晓多XPT大模型如何实现7×24小时智能响应智能客服真的能7×24小时响应?晓多XPT大模型如何实现淘宝/京东咨询秒回?淘宝/京东咨询秒回!揭秘晓多XPT大模型如何实现7×24小时智能响应智能客服真的能7×24小时响应?晓多XPT大模型如何实现淘宝/京东咨询秒回?淘宝/京东咨询秒回!揭秘晓多XPT大模型如何实现7×24小时智能响应智能客服真的能7×24小时响应?晓多XPT大模型如何实现淘宝/京东咨询秒回?淘宝/京东咨询秒回!揭秘晓多XPT大模型如何实现7×24小时智能响应

    还在为客服响应迟缓、夜间无人应答、大促期间咨询量激增而烦恼?晓多xpt大模型依托国家生成式人工智能服务备案认证技术,真正实现全天候7×24小时秒级回复,助力淘宝、京东等电商平台牢牢抓住每一个关键转化时刻!基于20亿条电商对话数据训练的语义理解系统,xpt大模型可精准捕捉98.7%的用户需求,响应时间…

    2026年9月27日 • 用户投稿
    000
  • qq浏览器如何更新到最新版本 QQ浏览器手动检查与自动更新设置

    qq浏览器如何更新到最新版本 QQ浏览器手动检查与自动更新设置qq浏览器如何更新到最新版本 QQ浏览器手动检查与自动更新设置qq浏览器如何更新到最新版本 QQ浏览器手动检查与自动更新设置qq浏览器如何更新到最新版本 QQ浏览器手动检查与自动更新设置

    更新QQ浏览器可解决功能异常问题。①通过“我的-设置-关于”手动检查更新;②官网下载最新安装包覆盖安装;③在设置和应用商店中开启自动更新功能,确保版本同步。 如果您发现QQ浏览器功能异常或无法正常加载网页,可能是由于浏览器版本过低导致与当前网站技术不兼容。及时更新至最新版本可以修复已知漏洞并提升浏览…

    2026年9月27日 • 用户投稿
    200
  • 怎么用豆包AI实现Python数据合并

    怎么用豆包AI实现Python数据合并怎么用豆包AI实现Python数据合并怎么用豆包AI实现Python数据合并怎么用豆包AI实现Python数据合并

    使用豆包ai实现python数据合并的方法如下:1. 描述清楚需求,例如按某一字段合并两个数据表;2. 豆包ai会生成基于pandas的代码示例,如pd.merge或pd.concat;3. 根据反馈调整参数,如连接方式how、拼接方向axis等;4. 利用ai解释代码含义或优化结果。常见合并方式包…

    2026年9月27日 • 用户投稿
    100
  • 《索尼克赛车 交叉世界》8月29日起开展4天免费网络测试

    《索尼克赛车 交叉世界》8月29日起开展4天免费网络测试《索尼克赛车 交叉世界》8月29日起开展4天免费网络测试《索尼克赛车 交叉世界》8月29日起开展4天免费网络测试《索尼克赛车 交叉世界》8月29日起开展4天免费网络测试

    来源:官方 《索尼克赛车 交叉世界》将于8月29日开启为期4天的免费网络测试 世嘉正式宣布,《索尼克赛车 交叉世界》将于北京时间2025年8月29日中午12:00起至9月2日中午12:00止,开展为期四天的免费网络测试。本次测试面向所有玩家开放,支持平台包括PlayStation®5、Nintend…

    2026年9月27日 • 用户投稿
    000
  • linux命令怎么换行

    linux命令怎么换行linux命令怎么换行linux命令怎么换行linux命令怎么换行

    在 Linux 命令中换行的三种方法:分号 (;):分隔多行命令,每行以分号结束。管道 (|):将上一条命令的输出作为下一条命令的输入,断开命令之间的连接。反斜杠 (): 用作转义字符,防止特殊字符被解释为命令的一部分,并使用 n 添加换行符。 如何在 Linux 命令中换行 在 Linux 命令中…

    2026年9月27日 • 用户投稿
    000
  • win10注册表保存不了提示出错怎么办

    win10注册表保存不了提示出错怎么办win10注册表保存不了提示出错怎么办win10注册表保存不了提示出错怎么办win10注册表保存不了提示出错怎么办

    注册表编辑器是计算机系统中的重要组件之一,然而近期有部分windows 10用户在编辑注册表后尝试保存时,遇到了“无法创建值,写入注册表失败”的错误提示。出现这种情况通常是因为当前用户权限不足所致。针对这一问题的具体解决办法如下: Windows 10注册表保存失败的处理方法 首先以管理员身份登录W…

    2026年9月27日 • 用户投稿
    000
  • 多核处理器在运行单线程任务时为何表现不佳?

    多核处理器在运行单线程任务时为何表现不佳?多核处理器在运行单线程任务时为何表现不佳?多核处理器在运行单线程任务时为何表现不佳?多核处理器在运行单线程任务时为何表现不佳?

    多核处理器在运行单线程任务时表现不佳,根本原因在于任务的串行性使其无法并行执行,即便拥有更多核心也难以提升性能。1. 单线程任务只能在一个核心上运行,其他核心无法参与;2. 任务内部存在严格的顺序依赖(如A→B→C),导致无法拆分并行处理;3. 根据Amdahl定律,程序加速比受限于串行部分比例,纯…

    2026年9月27日 • 用户投稿
    400
  • 带动AMD股价上涨7000%:苏妈身家却仅15亿美元!不及黄仁勋1%

    10月12日消息,苏姿丰担任AMD首席执行官已满11年,在其领导下,公司股价累计飙升达7000%。近期因宣布与OpenAI达成合作,股价再度暴涨近40%,市值刷新历史纪录,达到3780亿美元。 尽管带领AMD实现惊人蜕变,并为投资者创造巨额回报,但苏姿丰的个人财富仍未跻身全球富豪前500名。 据《福…

    2026年9月26日
    000
  • ️「领域驱动设计」Java微服务拆分策略与界限上下文划分

    ️「领域驱动设计」Java微服务拆分策略与界限上下文划分️「领域驱动设计」Java微服务拆分策略与界限上下文划分️「领域驱动设计」Java微服务拆分策略与界限上下文划分️「领域驱动设计」Java微服务拆分策略与界限上下文划分

    微服务拆分的核心在于通过领域驱动设计(DDD)识别业务的“自然边界”,其中界限上下文(Bounded Context)是关键。它强调从业务语言和领域专家沟通出发,而非技术视角,确保服务高内聚、低耦合。通过事件风暴、通用语言、业务能力分析等方法识别界限上下文,并结合团队结构与上下文映射明确服务边界。在…

    2026年9月26日 • 用户投稿
    000
  • win11任务栏卡死重启也没用怎么办

    win11任务栏卡死重启也没用怎么办win11任务栏卡死重启也没用怎么办win11任务栏卡死重启也没用怎么办win11任务栏卡死重启也没用怎么办

    在安装windows 11系统之后,许多用户的电脑可能会遇到一些使用上的问题,其中较为常见的就是任务栏卡死的现象。那么,当win11的任务栏卡死且重启无效时,该如何处理呢?接下来就为大家介绍几种解决win11任务栏卡死的有效方法。 第一种方法(官方提供的临时解决方案): 首先按下Ctrl+Alt+D…

    2026年9月26日 • 用户投稿
    600
  • DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙

    DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙

    使用deepseek和剪映制作视频的流程包括三个步骤:首先,通过明确指令和提供示例优化deepseek生成文案;其次,选择合适配音并调整参数提升剪映ai配音自然度;最后,利用剪映ai剪辑快速生成初版视频并手动精细调整以达到理想效果。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使…

    2026年9月26日 • 用户投稿
    000
  • 系统安装完成后,用什么工具批量安装驱动最方便?

    系统安装完成后,用什么工具批量安装驱动最方便?系统安装完成后,用什么工具批量安装驱动最方便?系统安装完成后,用什么工具批量安装驱动最方便?系统安装完成后,用什么工具批量安装驱动最方便?

    集成式驱动管理软件虽能快速安装驱动,但存在捆绑软件、驱动版本过时、隐私安全风险及系统不稳定等问题。建议仅用其解决网卡驱动等燃眉之急,后续优先从主板、显卡等设备官网下载匹配驱动,通过Windows Update补充基础驱动,并按芯片组→网卡→显卡→声卡顺序安装。安装后需检查设备管理器状态,进行功能测试…

    2026年9月26日 • 用户投稿
    100
  • sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧

    sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧

    使用“Bookmark: Select All Bookmarked Lines”命令选中所有书签行,再按Delete键即可批量删除,结合命令面板操作高效快捷。 在Sublime Text中,快速删除所有带有书签标记的行可以通过“书签”功能结合“命令面板”和“查找替换”的高级操作实现。虽然Subli…

    2026年9月26日 • 用户投稿
    000
  • 京东商品没有客服是怎么回事?快递退货该如何报备?退货报备全流程解析

    京东商品没有客服是怎么回事?快递退货该如何报备?退货报备全流程解析京东商品没有客服是怎么回事?快递退货该如何报备?退货报备全流程解析京东商品没有客服是怎么回事?快递退货该如何报备?退货报备全流程解析京东商品没有客服是怎么回事?快递退货该如何报备?退货报备全流程解析

    在京东购物时,许多用户会发现某些商品页面缺少直接的客服联系入口,一旦遇到商品质量问题或需要售后服务,往往会产生焦虑情绪。此外,在退货过程中如何正确申报快递信息、避免售后纠纷,也成为消费者普遍关心的问题。本文将深入解读京东客服系统的运行逻辑,并详细演示退货报备的完整操作流程。 一、为何部分京东商品不显…

    2026年9月26日 • 用户投稿
    500

发表回复

登录后才能评论
关注微信