2011-11-20 93 views
3

我正在使用C++製作Linux應用程序,它將信息輸出到控制檯。部分程序需要一段時間才能進行計算,我想在控制檯中添加一個類似於wget中使用的狀態欄(我將自己的描述放在下面)。將狀態欄添加到C++控制檯應用程序

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

什麼是最好的方法來實現這個目標?是否有任何有用的庫可以輕鬆添加此功能?

+2

您使用的是什麼樣的控制檯?有些人對狀態行進行本地支持,然後從狀態行返回。檢查terminfo或termcap數據庫中的'tsl'和'fsl'功能。 –

+0

我發佈了一個[類似問題]的答案(http://stackoverflow.com/questions/4956442/displaying-completed-while-executing-in-c/4958152#4958152)(_「在C中執行時顯示完成% 「_」)主要處理終端光標的控制。 – gamen

回答

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

好戲。但要小心,每一行和前一行一樣長(否則輸出結束空格) –

+0

@BasileStarynkevitch:好點。 – ibid

1

ncurses庫應該對您有用。或者你也可以通過字符書寫的進展行字符,使用退格,呼籲fflushstd::flush

一個更簡單的方法就是隻輸出點......