C++与Qt实战:Windows实时系统监控工具开发入门 C 和 Qt 在 Windows 平台上做实时系统监控工具是系统编程入门阶段一个很有代表性的工程练习。它要求开发者同时处理系统信息采集、定时任务、数据模型和 GUI 刷新而这些内容恰恰是 C 语法书很少整合在一起讲的。所谓“实时系统监控”并不是真的做到毫秒级响应而是在秒级周期内持续采样 CPU、内存、磁盘、网络和进程信息并把变化用图表和表格展示出来。这个项目适合已经掌握 C 基本语法、希望接触 Windows API 和 Qt 事件循环的读者也适合作为系统编程方向的第一个完整工程。文章会基于 Windows 10/11 和 Qt Widgets 写一个最小可运行版本并说明每个指标背后的 Windows API 以及容易踩的坑。1. 实时系统监控工具包含哪些技术点1.1 一个监控工具要采集的数据和对应的 Windows API系统监控工具并不是一个单纯的 UI 项目它要先回答一个问题要监控哪些指标这些指标从哪里来。Windows 本身没有提供一个“帮我把系统状态一次性读出来”的统一接口。你需要按资源类型逐个调用对应的系统 API。常见监控指标、含义和采集函数如下监控指标表示内容核心 Windows API采样方式CPU 使用率整个系统 CPU 的忙闲比例GetSystemTimes两次采样做差值物理内存总内存、可用内存、已用比例GlobalMemoryStatusEx直接读取磁盘容量每个分区总量、剩余空间GetLogicalDrives、GetDiskFreeSpaceExA直接读取网络速率每秒上行、下行字节数GetIfTable两次采样做差值进程列表PID、进程名、内存占用EnumProcesses、OpenProcess周期枚举这张表里有一个关键规律静态信息可以直接读动态速率必须做差分。CPU 使用率不是“读出来”的它是两个时间点之间的忙碌时间增量除以总时间增量网络速率也一样必须先拿到累计字节数再除以采样间隔。理解这一点整个监控工具的核心逻辑就清楚了一半。1.2 为什么这个项目适合作为 C 系统编程入门很多 C 学习者的困惑是语法学了类、指针、容器都会用了但不知道这些能力在真实项目里怎么组合。这个监控工具正好提供了一条完整的练习链路。它用到的基础能力非常直接结构体和指针Windows API 大量使用结构体指针例如 MEMORYSTATUSEX、FILETIME、MIB_IFROW。句柄管理打开进程后要 CloseHandle否则句柄泄漏。返回值处理几乎每个 API 都要判断返回 FALSE 或错误码。字符串编码读取进程路径时必须使用宽字符版本接口再转换成 QString。算法和容器进程列表要用 QVector 保存并按照内存占用排序。从语言层面看这个项目比纯算法题更接近工程。从系统编程层面看它涉及进程、内存、文件和网络接口难度适中。不像驱动开发那样深入内核又比单纯调用 psutil 之类脚本库更接近底层。如果只为了快速看到监控数据写一个 Python 脚本或 PowerShell 命令可能更快。但 C 和 Qt 的组合能让你亲手处理 API 返回值、句柄释放、UI 刷新和定时事件这些才是系统编程里真正需要积累的经验。1.3 定时采样、增量计算和界面刷新的完整链路监控工具的主循环可以理解成一个环形流水线定时器触发。调用系统 API 采集当前数据。用新数据和上一次采样结果做增量计算。更新内存中的模型数据。把模型数据刷新到曲线、表格和文本标签。用伪代码表达是while (timerRunning) { 采集 CPU / 内存 / 磁盘 / 网络 / 进程数据; 计算 CPU 使用率 (总时间增量 - 空闲时间增量) / 总时间增量; 计算网络速率 字节增量 / 时间差; 更新 UI; 等待下一个定时周期; }在 Qt 里这个循环不需要自己写 while而是用 QTimer 的 timeout 信号驱动。信号到了之后执行一个刷新槽函数槽函数里完成采集和 UI 更新。这里要特别注意Windows API 的采样值大多是“累计值”。比如 GetSystemTimes 返回的是系统启动以来的累计 CPU 时间GetIfTable 返回的是接口累计流量。如果每次都显示原始值界面只会显示一个看不到含义的大数字。正确做法是把当前采样值减掉上一次采样值得到这段时间内的增量再除以时间差得到速率或百分比。2. 环境准备Qt 版本、编译器和 Charts 模块2.1 推荐开发环境组合开发这个项目建议使用 Qt 6.5 及以上版本配合 MSVC 编译器。Qt 5.15 也能完成但 Qt 6 在 Windows API 调用和 CMake 支持上更现代错误提示也更好定位。推荐组合如下组件推荐版本说明操作系统Windows 10/11 64 位本文代码基于 x64 环境QtQt 6.5 或更高需要勾选 Qt Widgets 和 Qt Charts编译器MSVC 2019 或 2022与 Windows SDK 兼容性最好构建工具qmake 或 CMake示例以 qmake 为主Windows SDK随 Visual Studio 安装提供 windows.h、psapi.h、iphlpapi.h不推荐在 Windows 上把 MinGW 作为首选。虽然 Qt 的 MinGW 套件也能运行但一些 Windows SDK 头文件、编译宏和调试器在 MSVC 下