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

Adding a status bar to c++ console applications

本文关键字:添加 状态栏 应用程序 控制台 c++      更新时间:2023-10-16

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

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

实现这个目标的最好方法是什么?有什么有用的库可以方便地添加这个功能吗?

如果你的程序类似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";
}

ncurses库应该对您有用。或者您可以一个字符一个字符地书写进度行,使用退格,调用fflushstd::flush等。

更简单的方法是输出点…

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