将状态栏添加到c ++控制台应用程序

时间:2011-11-20 10:41:52

标签: c++ linux console progress-bar status

我正在使用C ++创建一个linux应用程序,它会将信息输出到控制台。程序的某些部分需要一段时间来计算,我想在控制台中添加一个状态栏,类似于wget中使用的状态栏(我将自己的描述放在下面)。

%complete[===========>               ] eta

实现这一目标的最佳方法是什么?是否有任何有用的库可以轻松添加此功能?

3 个答案:

答案 0 :(得分:5)

如果您的程序类似于wget,也就是说,它基本上是一个批处理程序而不需要全屏UI(我建议ncurses),您可以使用该技巧打印回车你的线后(但不是换行);你写的下一件事将覆盖同一行。

这是一个演示。

#include <iostream>
#include <unistd.h>

int main(void)
{

        for (int i = 0; i < 10; i++) {
                std::cout << "Status: " << i << "\r" << std::flush;
                sleep(1);
        }
        std::cout << "Completed.\n";
}

答案 1 :(得分:1)

ncurses库应该对您有用。或者你可以用char写入进度线char,使用退格,调用fflushstd::flush等。

更简单的方法就是输出点......

答案 2 :(得分:0)

您可以使用 debconf-apt-progress 来运行命令,同时像 apt 一样显示进度行。您的命令需要通过管道 fd 将进度报告回 debconf-apt-progress。我还没有想出如何从 debconf-apt-progress 中提取这个功能。