【问题标题】:Adding a status bar to c++ console applications向 C++ 控制台应用程序添加状态栏
【发布时间】:2011-11-20 10:41:52
【问题描述】:

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

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

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

【问题讨论】:

  • 您使用的是哪种控制台?有些本地支持移动到状态行并从状态行返回。检查 terminfo 或 termcap 数据库中的 tslfsl 功能。
  • 我在similar question“在 C 中执行时显示已完成的百分比”)发布了一个答案,该答案主要用于控制终端光标。

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


【解决方案1】:

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

【讨论】:

  • 好把戏。但要注意每一行都和前一行一样长(否则输出结束空格)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2018-02-24
      • 2010-12-08
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多