Boost.Timer 中的 progress_display 进度条介绍与使用
文章目录
- Boost.Timer 中的 progress_display 进度条介绍与使用
- 基本介绍
- 基本用法
- 1. 包含头文件
- 2. 创建进度条对象
- 3. 更新进度
- 完整示例
- 输出示例
- 高级用法
- 自定义输出流
- 重新开始进度条
- 注意事项
- 替代方案
Boost.Timer 中的 progress_display 进度条介绍与使用
Boost.Timer 库中的 progress_display
类是一个简单的控制台进度条工具,用于在长时间运行的任务中向用户显示进度反馈。
基本介绍
progress_display
类位于 <boost/timer/progress_display.hpp>
头文件中,主要特点包括:
- 在控制台上显示一个可视化的进度条
- 自动计算和显示预计剩余时间
- 不需要额外的图形库支持
- 轻量级且易于使用
基本用法
1. 包含头文件
#include <boost/timer/progress_display.hpp>
2. 创建进度条对象
boost::timer::progress_display progress(总工作量);
3. 更新进度
++progress; // 完成一个单位的工作
或
progress += 完成量; // 完成多个单位的工作
完整示例
#include <boost/timer/progress_display.hpp>
#include <vector>
#include <algorithm>
#include <iostream>
#include <thread>
#include <chrono>int main()
{// 创建一个包含100个元素的大向量std::vector<int> v(100);// 初始化进度条,总工作量为v.size()boost::timer::progress_display progress(v.size());// 模拟耗时操作for(auto& item : v){// 处理每个元素item = 42;// 模拟耗时std::this_thread::sleep_for(std::chrono::milliseconds(50));// 更新进度++progress;}return 0;
}
输出示例
进度条在控制台上的输出类似这样:
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
**************************************************** ]
高级用法
自定义输出流
默认情况下,progress_display
输出到 std::cout
,但你可以指定其他输出流:
boost::timer::progress_display progress(100, std::cerr);
重新开始进度条
progress.restart(新的总工作量);
注意事项
progress_display
不是线程安全的,如果在多线程环境中使用需要额外的同步机制- 进度条会修改控制台输出,可能会干扰其他输出
- 对于非常快速完成的任务,进度条可能没有足够时间显示
替代方案
如果你需要更复杂的进度条功能,可以考虑:
- Boost.Progress (已弃用)
- 特定平台的GUI进度条
- 第三方库如indicators或cpp-progressbar
Boost.Timer 的 progress_display
是一个简单实用的工具,适合在控制台应用程序中快速添加进度反馈。