我正在使用C++製作Linux應用程序,它將信息輸出到控制檯。部分程序需要一段時間才能進行計算,我想在控制檯中添加一個類似於wget中使用的狀態欄(我將自己的描述放在下面)。將狀態欄添加到C++控制檯應用程序
%complete[===========> ] eta
什麼是最好的方法來實現這個目標?是否有任何有用的庫可以輕鬆添加此功能?
我正在使用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";
}
好戲。但要小心,每一行和前一行一樣長(否則輸出結束空格) –
@BasileStarynkevitch:好點。 – ibid
ncurses庫應該對您有用。或者你也可以通過字符書寫的進展行字符,使用退格,呼籲fflush
或std::flush
等
一個更簡單的方法就是隻輸出點......
您使用的是什麼樣的控制檯?有些人對狀態行進行本地支持,然後從狀態行返回。檢查terminfo或termcap數據庫中的'tsl'和'fsl'功能。 –
我發佈了一個[類似問題]的答案(http://stackoverflow.com/questions/4956442/displaying-completed-while-executing-in-c/4958152#4958152)(_「在C中執行時顯示完成% 「_」)主要處理終端光標的控制。 – gamen