-
Notifications
You must be signed in to change notification settings - Fork 1
Utils_ProgressBar
SweerItTer edited this page Feb 1, 2026
·
3 revisions
ProgressManager 是 utilsCore Utils 模块的核心类,提供多进度条管理功能,支持同时显示多个进度条。
- 管理多个进度条
- 显示进度条
- 支持百分比显示
- 支持自定义宽度
- 多任务进度监控
- 批量处理
- 长时间任务
- 进度并行显示
- 依赖: 标准库
- 被依赖: 批量处理、文件操作等模块
ProgressManager 是多进度条管理的封装类,提供:
- 添加进度条
- 更新进度
- 标记完成
- 自动绘制
- 管理者模式: 管理多个进度条
struct Bar {
std::string name; // 进度条名称
int value = 0; // 当前进度
int total = 100; // 总进度
int width = 50; // 显示宽度
};| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
name |
string |
- | 进度条名称 |
value |
int |
0 | 当前进度 |
total |
int |
100 | 总进度 |
width |
int |
50 | 显示宽度 |
int addBar(const std::string& name, int total = 100);参数说明:
-
name(输入): 进度条名称 -
total(输入): 总进度(默认 100)
返回值: 进度条索引
所有权归属:
- ProgressManager 持有进度条的所有权
注意事项:
- 返回的索引用于后续更新
- 线程安全操作
- 可以添加多个进度条
使用例程:
ProgressManager pm;
// 添加进度条
int bar1 = pm.addBar("Task 1", 1000);
int bar2 = pm.addBar("Task 2", 500);void update(int index, int current);参数说明:
-
index(输入): 进度条索引 -
current(输入): 当前进度
返回值: 无
所有权归属:
- 无所有权转移
注意事项:
- index 必须有效
- 自动绘制进度条
- 线程安全操作
使用例程:
// 更新进度
pm.update(bar1, 500);
pm.update(bar2, 250);void done(int index);参数说明:
-
index(输入): 进度条索引
返回值: 无
所有权归属:
- 无所有权转移
注意事项:
- index 必须有效
- 将进度设置为 total
- 自动绘制进度条
- 线程安全操作
使用例程:
// 标记完成
pm.done(bar1);
pm.done(bar2);void draw();参数说明: 无
返回值: 无
所有权归属:
- 无所有权转移
注意事项:
- 光标上移到顶部
- 绘制所有进度条
- 自动刷新输出
使用例程:
// 手动绘制
pm.draw();std::vector<Bar> bars;
std::mutex mtx;说明:
-
bars存储所有进度条 -
mtx保护所有操作
ProgressManager pm;
// 添加进度条
int bar1 = pm.addBar("Download", 1000);
// 更新进度
for (int i = 0; i <= 1000; i += 10) {
pm.update(bar1, i);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
// 标记完成
pm.done(bar1);ProgressManager pm;
// 添加多个进度条
int bar1 = pm.addBar("Task 1", 100);
int bar2 = pm.addBar("Task 2", 200);
int bar3 = pm.addBar("Task 3", 150);
// 并行更新
std::vector<std::thread> threads;
threads.emplace_back([&]() {
for (int i = 0; i <= 100; i++) {
pm.update(bar1, i);
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
});
threads.emplace_back([&]() {
for (int i = 0; i <= 200; i++) {
pm.update(bar2, i);
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
});
threads.emplace_back([&]() {
for (int i = 0; i <= 150; i++) {
pm.update(bar3, i);
std::this_thread::sleep_for(std::chrono::milliseconds(7));
}
});
for (auto& t : threads) t.join();
pm.done(bar1);
pm.done(bar2);
pm.done(bar3);ProgressManager pm;
// 添加进度条
int bar = pm.addBar("Processing", files.size());
// 处理文件
for (size_t i = 0; i < files.size(); i++) {
process_file(files[i]);
pm.update(bar, i + 1);
}
pm.done(bar);ProgressManager pm;
// 添加进度条(自定义总数)
int bar = pm.addBar("Upload", 5000);
// 更新进度
for (int i = 0; i <= 5000; i += 100) {
pm.update(bar, i);
}
pm.done(bar);- 线程安全: 所有操作都是线程安全的
- 索引有效性: 确保 index 有效
- 终端控制: 使用 ANSI 转义序列控制光标
- 自动绘制: update() 和 done() 会自动调用 draw()
- 多进度条: 可以同时管理多个进度条
- 完成状态: done() 将进度设置为 total
- 宽度: 默认宽度为 50,可以修改 Bar.width
- 输出: 输出到 stdout
- AsyncThreadPool - 异步线程池
- Utils 模块总览
主页
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 监视器