Skip to content

About

Resource_Monitor_app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Resource Monitor

一个以低资源占用为首要目标的 C++20 桌面资源监控器。首个应用目标是 Windows 10/11 x64 原生托盘程序,界面路线采用 Win32、Direct2D 和 DirectWrite,不使用第三方 GUI 框架。

当前阶段

当前仓库已有可独立构建和测试的纯 C++ 核心,并已具备可运行的原生 Win32 应用纵切:

  • 指标与快照领域模型;
  • 后台采样协调器;
  • 基于 GetSystemTimes 的 Windows CPU 使用率采集器;
  • 基于 GlobalMemoryStatusEx 的物理内存使用率采集器;
  • Windows 系统卷已用/总容量,以及系统卷读写吞吐;
  • 活动物理网卡的汇总接收/发送吞吐;
  • 可见的采样停止状态与托盘手动重新采样恢复;
  • 保留为平台无关测试夹具的合成采集器;
  • 隐藏 Win32 宿主窗口、托盘图标和弹出面板;
  • Direct2D/DirectWrite 绘制路径;
  • CTest 测试套件,包含由 Job Object 兜底清理的跨进程 Win32 smoke protocol;
  • Visual Studio 2022 x64 Debug/Release 预设和可复用的编译器警告配置。

应用通过 Windows GetSystemTimes 采集系统 CPU 使用率,并通过 GlobalMemoryStatusEx 采集物理内存使用率。CPU 首次成功读取会显示“正在准备”;后续有效区间显示百分比;API 失败或计数器异常显示“暂时不可用”,并在后续采样中自动重新建立基线。内存读取失败不会影响 CPU 基线,CPU 失败也不会抑制有效内存数据。

磁盘容量针对 Windows 系统目录所在卷,不硬编码为 C:。容量使用卷的总字节数与总空闲字节数计算“已用/总量”,不会把当前调用者配额误当作整卷空闲空间。系统卷读写速率来自持久 PDH LogicalDisk 计数器;首个有效观测用于建立基线并显示“正在准备”,后续真实空闲显示 0 B/s。容量采集与 PDH 速率对相互独立,读写两个方向保持原子状态;任一磁盘来源失败都不会抑制 CPU、内存或网络数据。

网络吞吐汇总活动的物理硬件接口,排除 loopback、tunnel 和虚拟/过滤接口,并按稳定接口身份计算实际采样时间内的接收/发送速率。没有物理网卡时显示“未检测到”;存在物理硬件但当前没有活动接口时,接收和发送都显示真实的 0 B/s。接口变化、计数器回退或 API 失败会重置速率基线,避免负值、半对或过期数据。

容量和速率使用 IEC 单位 B、KiB、MiB、GiB(大容量还可使用 TiB、PiB、EiB)。真实数值 0 与不可用状态严格区分。CPU 温度仍明确显示为“不支持”,项目不会为此虚构温度或默认安装传感器驱动;SyntheticCollector 仅保留为平台无关的确定性测试夹具。

如果异常逃逸出采集或快照发布,CPU、内存、系统卷容量、磁盘读写和网络收发七项动态指标都会显示 — / 采样已停止,CPU 温度继续保持其能力状态。此时托盘右键菜单提供“重新采样”;应用不会自动重试。手动恢复会创建新的采集器和采样 generation,并一直保留停止展示,直到新 generation 的第一张真实快照到达。容量可在第一帧立即可用,速率通常先显示“正在准备”。新采集器的 sequence 从头开始,因此进程内快照身份是 (sampling generation, snapshot sequence),不能跨 generation 只比较 sequence。

跨进程 smoke protocol v4 仅在测试以 --smoke-test 和唯一 token 启动时启用。x64 共享状态为 1088 字节,并保留既有的 448 字节 ABI 前缀;它用于验证真实进程中的八项展示、托盘注册、弹窗切换、隐藏按需绘制、鉴权拒绝、采样停止/恢复和正常退出。tools/ResourceMonitorSmokeControl.ps1 提供离线 ValidateAbi,以及鉴权 Query、Toggle、Fault、Restart、Exit 控制;普通启动不会创建该协议。

弹窗首选 client 为 360 x 296 DIP,支持 96/120/144/192 DPI、负坐标显示器和小工作区裁剪 fallback。当前未实现历史、持久化、告警、设置、自启、单实例约束、全卷/每进程磁盘统计、单网卡/每进程网络拆分、网速测试、SMART、磁盘温度、风扇、电压或功耗。在超过 64 个逻辑处理器且使用多个处理器组的系统上,当前实现不承诺严格的跨组整机 CPU 聚合。RESOURCE_MONITOR_BUILD_WIN32_APP 控制 Windows 应用目标;非 Windows 环境仍可配置和使用平台无关核心。

技术路线与开发环境

Windows 应用路线:

  • C++20 与 CMake 3.27 或更高版本;
  • Visual Studio 2022 Build Tools 或 Visual Studio 2022;
  • “使用 C++ 的桌面开发”工作负载和 Windows SDK;
  • 原生 Win32 托盘与窗口 API;
  • Windows SDK 提供的 Direct2D 和 DirectWrite。

项目不依赖第三方 GUI 工具包,也不安装第三方 GUI 依赖。

配置、构建与测试

Debug:

cmake --preset windows-debug
cmake --build --preset windows-debug
ctest --preset windows-debug

Release:

cmake --preset windows-release
cmake --build --preset windows-release
ctest --preset windows-release

这些预设使用 Visual Studio 17 2022 的 x64 生成器,不依赖 Ninja。只构建当前核心目标可使用:

cmake --build --preset windows-debug --target resource_monitor_core

数据可信原则

所有指标必须区分“真实数值 0”和“不可用”:

  • 只有成功采集的指标才包含数值;
  • 不支持、权限不足、超时或暂时失败时显示明确状态;
  • 绝不使用 0 冒充缺失的温度、电压、频率或使用率。

项目不会为了读取传感器而自行开发或默认安装内核驱动。Windows CPU 使用率来自系统时间计数器,物理内存使用率来自系统内存状态,磁盘数据来自系统卷与 PDH,网络数据来自 Windows 接口表;未实现的指标不会由合成数据冒充真实设备数据。

About

Resource_Monitor_app

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages