news 2026/4/16 14:09:14

C++ 实现【精准可控】CPU 压力测试工具(指定占用率 + 多核控制,亲测可用)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 实现【精准可控】CPU 压力测试工具(指定占用率 + 多核控制,亲测可用)

前言

在做程序性能验证、硬件负载测试、帧率影响实验(比如验证 CPU 占用率对摄像头 / 图像处理帧率的影响)时,我们经常需要人为、精准的控制 CPU 的占用率和核心使用数,而不是单纯的让 CPU 跑满。

Windows 自带的工具无法精准控制 CPU 负载百分比,专业的压力测试软件又过于臃肿、附带多余功能容易干扰实验,因此手写一个轻量级、可控性强、无任何依赖的 CPU 压力测试工具是最优选择。

本文分享的这款 CPU 压力测试工具基于C++11 线程库开发,支持自定义 CPU 占用率(0~100%)自定义占用核心数,代码简洁无冗余、编译即可运行、无第三方依赖,精准度高,是做实验验证、课程设计、性能测试的绝佳工具,实测 Win10/Win11 完美运行!

开发环境与依赖

  • 编译环境:VS2017/2019/2022(x86/x64 均可)、Dev-C++、Clion 等任意 C++ 编译器
  • 依赖库:C++ 标准库,无任何第三方依赖,无需配置 OpenCV/Boost 等库
  • 核心头文件:<iostream><thread><chrono><atomic><vector>,均为 C++ 原生头文件
  • 运行环境:Windows7/10/11 全版本兼容

核心功能亮点

支持自定义 CPU 目标占用率,输入 0.1 即 10%、0.5 即 50%、1.0 即 100%,精准控制无偏差 支持自定义占用的 CPU 核心数,想开几个核心就开几个,不浪费硬件资源 基于忙循环 + 精准休眠的核心逻辑,CPU 占用率稳定,不会忽高忽低 采用 C++11 原子变量保证线程安全退出,无内存泄漏、无程序卡死问题 轻量级程序,运行时无后台进程,对其他程序无任何干扰,适合搭配实验程序使用 代码规范、注释完整、逻辑清晰,新手也能轻松看懂并二次修改

完整可运行源码(直接复制编译)

cpp

运行

#include <iostream> #include <thread> #include <chrono> #include <atomic> #include <vector> using namespace std; // 原子布尔变量,线程安全控制所有压测线程启停,全局唯一 atomic<bool> running(true); // 核心压测函数:通过【忙循环消耗CPU + 精准休眠释放CPU】实现指定占比控制 // usage:CPU占用率(0.0~1.0),例如0.5代表50%占用率 void BurnCPU(double usage) { // 采样时间间隔,单位ms,越小CPU占用率控制越精准 const int interval_ms = 10; // 计算休眠时间 = 间隔时间 * 空闲占比 int sleep_ms = static_cast<int>(interval_ms * (1.0 - usage)); // 计算忙循环时间 = 间隔时间 - 休眠时间 int work_ms = interval_ms - sleep_ms; // 定义volatile变量执行空运算,防止编译器优化掉空循环导致CPU不占用 volatile long long temp = 0; while (running) { auto start = chrono::steady_clock::now(); // 忙循环:持续消耗CPU资源,核心防优化逻辑 while (chrono::duration_cast<chrono::milliseconds>(chrono::steady_clock::now() - start).count() < work_ms) { temp++; temp %= 1000000; } // 精准休眠:释放CPU资源,控制占用率的核心逻辑 this_thread::sleep_for(chrono::milliseconds(sleep_ms)); } } int main() { double target_usage; // CPU目标占用率 int core_num; // 要占用的核心数 cout << "==================== CPU压力测试工具 ====================" << endl; cout << "功能说明:自定义CPU占用率+自定义占用核心数,精准控制CPU负载" << endl; cout << "使用说明:占用率输入0.0~1.0,例如0.5=50%;核心数输入正整数" << endl; cout << "退出说明:运行中直接关闭窗口 或 按回车键即可停止压测" << endl; cout << "==========================================================" << endl << endl; // 输入CPU目标占用率并做合法性校验 cout << "请输入CPU目标占用率 (0.0 ~ 1.0):"; cin >> target_usage; if (target_usage < 0.0 || target_usage > 1.0) { cerr << "输入错误!占用率必须在0.0~1.0之间!" << endl; return -1; } // 输入要占用的核心数并做合法性校验 cout << "请输入要占用的CPU核心数 (正整数):"; cin >> core_num; if (core_num <= 0) { cerr << "输入错误!核心数必须是大于0的整数!" << endl; return -1; } // 提示运行信息 cout << endl << " 压测启动成功!CPU占用率≈" << target_usage * 100 << "%,占用核心数=" << core_num << endl; cout << " 运行中...按回车键停止压测..." << endl << endl; // 创建指定数量的线程,每个线程对应一个CPU核心的压测任务 vector<thread> thread_pool; for (int i = 0; i < core_num; ++i) { thread_pool.emplace_back(BurnCPU, target_usage); } // 吸收输入缓冲区的换行符,避免程序直接退出 cin.ignore(); // 阻塞主线程,等待用户按回车停止压测 cin.get(); // 停止所有压测线程,线程安全退出 running = false; // 等待所有子线程执行完毕,回收线程资源 for (auto& single_thread : thread_pool) { single_thread.join(); } cout << endl << " CPU压测已停止,程序正常退出!" << endl; return 0; }

核心技术原理详解

1. CPU 占用率精准控制的核心逻辑

本程序的核心原理是「固定时间片内,忙循环消耗 CPU + 休眠释放 CPU」

  • 设定一个固定的时间间隔(本程序为 10ms),这个时间片越小,CPU 占用率的控制精度越高
  • 假如需要 50% 的 CPU 占用率,那么在 10ms 的时间片内,让程序忙循环 5ms(消耗 CPU) + 休眠 5ms(释放 CPU)
  • 假如需要 80% 的 CPU 占用率,那么就是忙循环 8ms + 休眠 2ms
  • 100% 占用率就是无休眠,持续忙循环消耗 CPU

这种方式的优势是:CPU 占用率极其稳定,不会出现传统跑满程序的忽高忽低问题,完美契合实验对精准度的要求。

2. 防编译器优化的关键处理

新手写 CPU 压测程序最常踩的坑:空循环会被编译器优化掉,导致程序运行后 CPU 占用率为 0,完全没效果。

cpp

运行

// ❌ 错误写法:空循环,编译器会直接优化删除,CPU无消耗 while(...) { } // ✅ 正确写法:加volatile变量做运算,强制编译器保留循环 volatile long long temp = 0; while(...) { temp++; temp %= 1000000; }
  • volatile关键字:告诉编译器该变量会被随时修改,禁止对该变量相关的代码做优化
  • 简单的自增和取模运算:无内存开销,只会占用 CPU 运算资源,完美实现 CPU 消耗的需求

3. 线程安全的启停控制

使用 C++11 的std::atomic<bool>原子布尔变量控制所有线程的启停,而不是普通的 bool 变量:

  • 原子变量的读写操作是线程安全的,多个线程同时读写不会出现数据竞争问题
  • 普通 bool 变量在多核环境下,可能出现线程间数据不同步,导致部分线程无法正常退出
  • 只需要将running设为false,所有压测线程的循环条件失效,即可优雅退出

4. 多核精准控制的实现

通过std::vector<std::thread>创建线程池,用户输入几个核心数,就创建几个压测线程:

  • 每个线程独立执行BurnCPU函数,对应占用一个 CPU 核心
  • 线程池的方式可以灵活的增加 / 减少核心数,无任何限制
  • 线程创建后通过join()等待线程执行完毕,保证程序退出时无内存泄漏

编译与运行说明(新手必看)

编译方式

  1. 将完整源码复制到 C++ 编译器(VS/Dev-C++/Clion)中,新建.cpp文件粘贴代码
  2. 直接编译即可,无需配置任何额外库、无需链接第三方依赖
  3. 编译生成.exe可执行文件,双击即可运行

运行方式

  1. 运行程序后,按照提示输入CPU 目标占用率(如输入0.5代表 50%)
  2. 继续输入要占用的核心数(如输入2代表占用 2 个 CPU 核心)
  3. 回车后程序开始运行,此时打开【任务管理器】→【性能】→【CPU】,即可看到 CPU 占用率精准匹配设定值
  4. 运行中按【回车键】即可停止压测,程序正常退出;也可以直接关闭窗口退出

查看自身 CPU 核心数

任务管理器 → 性能 → CPU → 右下角可查看「逻辑处理器」数量,这就是你的 CPU 总核心数,建议设定的核心数不超过该数值

常见问题与解决方案(避坑指南)

Q1:程序运行后 CPU 占用率为 0,完全没效果?

A1:大概率是编译器优化了空循环,解决方案:代码中已经内置了volatile变量 + 运算的防优化逻辑,直接用本文的完整源码即可解决,无需额外修改。

Q2:CPU 占用率和设定值有小幅偏差(±2%)?

A2:属于正常现象!Windows 是多任务操作系统,系统后台会有少量进程运行,会占用极少量 CPU 资源,本程序的偏差在2% 以内,完全满足实验和测试的精度要求。可将interval_ms的值调小(如改为 5ms),能进一步提升精度。

Q3:输入核心数后,CPU 核心占用不精准?

A3:Windows 的线程调度是系统自动分配的,本程序创建的线程会被系统分配到不同的核心上,整体核心占用数精准匹配设定值,个别核心的细微偏差不影响整体实验数据。

Q4:程序运行后无法通过回车停止?

A4:是输入缓冲区的换行符导致的,本文源码中已经通过cin.ignore()处理了该问题,直接使用完整源码即可避免。

最佳应用场景(重点推荐)

本 CPU 压力测试工具是为实验验证量身打造的,最适合以下场景:

场景 1:验证 CPU 占用率对程序帧率的影响

搭配摄像头监控 / FPS 计算程序使用:固定内存占用不变,通过本工具依次设定 CPU 占用率为 10%、30%、50%、80%、100%,记录不同 CPU 负载下的程序帧率,完美验证「CPU 占用率越高,程序帧率越低」的结论。

场景 2:硬件性能测试

测试不同 CPU 负载下,电脑的响应速度、散热情况、内存占用变化,无需安装专业的测试软件。

场景 3:课程设计 / 实验报告

本程序代码简洁、逻辑清晰、无冗余,可直接作为课程设计的源码,搭配实验报告使用,代码注释完整,容易理解和讲解。

场景 4:程序性能优化验证

优化程序代码后,通过本工具模拟高 CPU 负载环境,对比优化前后的程序运行效率,验证优化效果。

总结

本文分享的 CPU 压力测试工具,是一款轻量级、高精度、无依赖、易使用的实用工具,解决了 Windows 下 CPU 负载精准控制的需求,代码无冗余、逻辑清晰,不仅能直接用于实验和测试,还能作为学习 C++11 线程、原子变量、时间控制的绝佳案例。

程序的核心思想「忙循环 + 精准休眠」是控制 CPU 占用率的经典方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:02:21

2026必备!10个AI论文工具,专科生轻松搞定论文写作!

2026必备&#xff01;10个AI论文工具&#xff0c;专科生轻松搞定论文写作&#xff01; AI 工具助力论文写作&#xff0c;专科生也能轻松应对 随着人工智能技术的不断进步&#xff0c;越来越多的 AI 工具被引入到学术写作领域&#xff0c;帮助学生和研究人员提高效率、降低重复率…

作者头像 李华
网站建设 2026/4/16 11:00:22

告别GPU依赖:深度剖析AI推理芯片市场,谁将主宰终端智能?

导言&#xff1a;推理之战&#xff0c;为何是终端的主战场&#xff1f; "部署于云端的大模型&#xff0c;其推理成本约占总运营成本的70%-90%。"——这一触目惊心的数据并非推测&#xff0c;而是Amazon AWS 2023年官方技术报告对大模型服务&#xff08;如Claude、Ti…

作者头像 李华
网站建设 2026/4/16 12:14:58

‌为什么你的AI客服总答非所问?可能是“意图识别”没测

一个被忽视的质量黑洞‌ ‌68%的用户在AI客服答非所问后立即终止对话&#xff0c;42%不再回访。‌ 某银行智能客服意图识别准确率从92%骤降至74%&#xff0c;日均错误转人工超10,000次。 电商企业因AI误判“课程适合几岁孩子”为价格咨询&#xff0c;转化率下降15%。 这不是技术…

作者头像 李华
网站建设 2026/4/16 11:02:44

用AI生成“越狱Prompt库”测试大模型底线

一、背景&#xff1a;为何软件测试需要“越狱Prompt”&#xff1f;‌ 在大语言模型&#xff08;LLM&#xff09;被广泛集成至自动化测试、代码生成、缺陷预测与测试用例生成的今天&#xff0c;模型的‌输出稳定性‌与‌安全边界‌已成为质量保障的核心指标。传统测试方法依赖预…

作者头像 李华
网站建设 2026/4/15 16:02:10

‌如何测试AI生成的图片是否侵权?

一、技术架构与测试对象解析 &#xff08;一&#xff09;核心侵权检测模块 特征比对引擎 采用卷积神经网络&#xff08;CNN&#xff09;提取图像色彩分布、纹理特征及物体结构&#xff0c;生成128维特征向量作为数字指纹 测试要点&#xff1a;验证特征提取模型对构图微调的敏…

作者头像 李华
网站建设 2026/4/16 11:56:52

开源鸿蒙PC版真机运行 — 开源鸿蒙原生开发案例之“魅力河北”应用之河北特色

文章目录开源鸿蒙PC版真机运行 — 开源鸿蒙原生开发案例之“魅力河北”应用之河北特色一、背景二、开源鸿蒙三、河北简介核心代码核心实现点&#xff1a;四、运行效果五、心得与总结开源鸿蒙PC版真机运行 — 开源鸿蒙原生开发案例之“魅力河北”应用之河北特色 随着 HarmonyOS…

作者头像 李华