-
Notifications
You must be signed in to change notification settings - Fork 1
Sys_Base
SweerItTer edited this page Feb 1, 2026
·
3 revisions
ResourceMonitor 是 utilsCore Sys 模块的核心基类,提供资源监控的基础框架,支持自动暂停和恢复机制。
- 提供资源监控的基础框架
- 自动暂停和恢复监控线程
- 输出监控数据到文件
- 线程安全访问
- CPU 监控
- 内存监控
- 其他资源监控
- 依赖: 标准库
- 被依赖: CpuMonitor, MemoryMonitor 等监控类
ResourceMonitor 是资源监控的基类,提供:
- 监控线程管理
- 自动暂停机制
- 数据输出到文件
- 线程安全访问
- 模板方法模式: 子类实现 sampleUsage()
- RAII: 自动管理线程生命周期
virtual bool sampleUsage(float& usage) = 0;参数说明:
-
usage(输出): 采样到的使用率
返回值:
-
true: 采样成功 -
false: 采样失败
所有权归属:
- 无所有权转移
注意事项:
- 纯虚函数,子类必须实现
- 在监控线程中调用
- 使用率范围由子类定义
ResourceMonitor(int sleeptime, const std::string& output_file);参数说明:
-
sleeptime(输入): 轮询间隔(毫秒) -
output_file(输入): 输出文件路径
返回值: 无
所有权归属:
- ResourceMonitor 拥有内部资源的所有权
注意事项:
- 构造时启动监控线程
- sleeptime 控制采样频率
- output_file 指定数据输出路径
使用例程:
// 创建监控器(每 1000ms 采样一次,输出到 /tmp/cpu_usage)
ResourceMonitor monitor(1000, "/tmp/cpu_usage");virtual ~ResourceMonitor();参数说明: 无
返回值: 无
所有权归属:
- 释放所有资源
注意事项:
- 停止监控线程
- 等待线程退出
- 自动清理资源
float getUsage();参数说明: 无
返回值: 当前使用率
所有权归属:
- 只读访问
注意事项:
- 线程安全操作
- 自动更新 last_access_ 时间
- 如果线程已暂停,自动唤醒
- 使用率范围由子类定义
使用例程:
float usage = monitor.getUsage();
printf("Usage: %.1f%%\n", usage);std::atomic<float> usage_{0.0f}; // 最新负载
std::atomic<bool> running_{true}; // 线程运行标志
std::atomic<bool> pause_{false}; // 暂停标志
std::mutex mutex_; // 互斥锁
std::condition_variable cv_; // 条件变量
std::atomic<std::chrono::steady_clock::time_point> last_access_; // 最后访问时间
std::thread monitor_thread_; // 监控线程
int sleeptime_; // 轮询间隔(毫秒)
std::string output_file_; // 输出文件void monitorLoop();行为:
- 检查是否需要暂停(30 秒无访问)
- 如果暂停,等待条件变量
- 调用 sampleUsage() 采样
- 更新 usage_
- 写入输出文件
- 休眠 sleeptime_ 毫秒
const std::chrono::seconds pause_timeout{30};
if (now - last_access_.load() > pause_timeout && !pause_) {
pause_ = true;
std::cerr << "Pausing monitor thread for " << output_file_ << "\n";
}说明:
- 30 秒无访问自动暂停
- 暂停后输出警告信息
- 调用 getUsage() 时自动唤醒
- usage_: 原子变量,线程安全
- running_: 原子变量,线程安全
- pause_: 原子变量,线程安全
- mutex_: 保护 last_access_ 和条件变量
- cv_: 条件变量,用于暂停/唤醒
- getUsage() 是线程安全的
- sampleUsage() 在监控线程中调用
- 子类实现 sampleUsage() 时注意线程安全
class CpuMonitor : public ResourceMonitor {
public:
CpuMonitor() : ResourceMonitor(1000, "/tmp/cpu_usage") {}
protected:
bool sampleUsage(float& usage) override {
// 采样 CPU 使用率
usage = get_cpu_usage();
return true;
}
};
// 使用
CpuMonitor monitor;
float usage = monitor.getUsage();CpuMonitor monitor;
// 获取使用率(30 秒内有访问)
float usage1 = monitor.getUsage();
// 等待 30 秒
std::this_thread::sleep_for(std::chrono::seconds(30));
// 再次获取使用率(线程会自动恢复)
float usage2 = monitor.getUsage();// 创建监控器,输出到 /tmp/cpu_usage
CpuMonitor monitor;
// 数据会自动写入到文件
// 每行一个值,格式: 12.5// 每 500ms 采样一次
class FastMonitor : public ResourceMonitor {
public:
FastMonitor() : ResourceMonitor(500, "/tmp/fast_usage") {}
protected:
bool sampleUsage(float& usage) override {
// 采样逻辑
return true;
}
};CpuMonitor monitor;
while (running) {
float usage = monitor.getUsage();
printf("CPU Usage: %.1f%%\n", usage);
std::this_thread::sleep_for(std::chrono::seconds(1));
}- 派生类: 必须实现 sampleUsage() 纯虚函数
- 自动暂停: 30 秒无访问自动暂停监控线程
- 自动恢复: 调用 getUsage() 时自动恢复
- 线程安全: getUsage() 是线程安全的
- 输出文件: 数据会自动写入到输出文件
- 轮询间隔: 构造时指定轮询间隔
- 使用率范围: 使用率范围由子类定义
- 析构顺序: 先停止线程,再等待线程退出
- CpuMonitor - CPU 监控
- MemoryMonitor - 内存监控
- Sys 模块总览
主页
API 文档
DMA 模块
DRM 模块
- DRM 模块总览
- DeviceController - DRM 设备控制器
- DrmLayer - DRM 图层管理
- PlanesCompositor - DRM 平面合成器
- DrmBpp - DRM 格式定义
NET 模块
- NET 模块总览
- TcpServer - TCP 服务器
- SocketConnection - Socket 连接管理
- CommandHandler - 命令处理器
- DataPacket - 数据包
V4L2 模块
- V4L2 模块总览
- CameraController - V4L2 摄像头控制器
- Frame - V4L2 帧数据结构
- FormatTool - V4L2 格式工具
- Exception - V4L2 异常类
V4L2Param 模块
- V4L2Param 模块总览
- ParamControl - 参数控制
- ParamLogger - 参数日志
- ParamProcessor - 参数处理器
RGA 模块
- RGA 模块总览
- RgaConverter - RGA 转换器
- RgaProcessor - RGA 处理器
- FormatTool - RGA 格式工具
MPP 模块
- MPP 模块总览
- EncoderContext - 编码器上下文
- EncoderCore - 编码器核心
- JpegEncoder - JPEG 编码器
- StreamWriter - 流写入器
- MppResourceGuard - MPP 资源守护
- FileTools - 文件工具
- FormatTool - 格式工具
Sys 模块
- Sys 模块总览
- CpuMonitor - CPU 监控器
- MemoryMonitor - 内存监控器
- Base - 基础类
Mouse 模块
- Mouse 模块总览
- Watcher - 鼠标监视器
Utils 模块
- Utils 模块总览
- AsyncThreadPool - 异步线程池
- ConcurrentQueue - 并发队列
- FdWrapper - 文件描述符包装器
- FenceWatcher - 围栏监视器
- FixedSizePool - 固定大小对象池
- Logger - 日志记录器
- ObjectsPool - 对象池
- OrderedQueue - 有序队列
- ProgressBar - 进度条
- SafeQueue - 安全队列
- SharedBufferState - 共享缓冲区状态
- SimpleVariant - 简单变体类型
- ThreadPauser - 线程暂停器
- ThreadUtils - 线程工具
- Types - 类型定义
- UdevMonitor - Udev 监视器