gpt4 book ai didi

c++ - linux 终端中的进度条

转载 作者:太空狗 更新时间:2023-10-29 23:52:57 25 4
gpt4 key购买 nike

我最近用 C++ 实现了一个进度条类。我写了类似的东西

cout << "\r" << percentage_done << "%" << flush;

现在我正在运行一些程序将输出管道化到 less。问题是 less 向我显示了很多类型的行

^M1%^M2%...

所以“\r”没有被正确解释。是否有可能以这种方式进行管道传输那 less 只会显示最后的 100% 行,还是我必须在我的程序中添加一个开关完全禁用进度条?

当我将输出直接通过管道传输到文件时,我遇到了同样的问题,所以输出文件不必要地占用大量磁盘空间。

最佳答案

This approach在没有额外选项的情况下,使用较少的管道工作正常。它通常适用于任何类型的输出重定向。

而且您不必按照其他方法的建议检查 is_terminal:

#include <boost/progress.hpp>
#include <boost/timer.hpp>
#include <vector>

int main(int argc,char *argv[])
{
const unsigned long expected_count=20;
boost::progress_display show_progress( expected_count );
for(int i=0;i!=expected_count;++i)
{
volatile std::vector<int> v(1024*1024*128);
++show_progress;
}
return 0;
}

输出是:

0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************

标尺在 progress_display 构造函数中打印。

然后进度条在++show_progress上逐渐被*填满;

关于c++ - linux 终端中的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com