将状态栏添加到C++控制台应用程序
问题描述:
我正在使用C++制作Linux应用程序,它将信息输出到控制台。部分程序需要一段时间才能进行计算,我想在控制台中添加一个类似于wget中使用的状态栏(我将自己的描述放在下面)。将状态栏添加到C++控制台应用程序
%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";
}
+1
好戏。但要小心,每一行和前一行一样长(否则输出结束空格) –
+0
@BasileStarynkevitch:好点。 – ibid
您使用的是什么样的控制台?有些人对状态行进行本地支持,然后从状态行返回。检查terminfo或termcap数据库中的'tsl'和'fsl'功能。 –
我发布了一个[类似问题]的答案(http://stackoverflow.com/questions/4956442/displaying-completed-while-executing-in-c/4958152#4958152)(_“在C中执行时显示完成% “_”)主要处理终端光标的控制。 – gamen