我想在C ++中创建一个打印“Loading ...”的进度条。
点数将显示为每秒一次。
喜欢正在加载> 正在加载。> 正在加载.. > 正在加载...... 。
我怎么能这样做?
谢谢。
答案 0 :(得分:1)
您可以使用线程每秒更新一次显示。
这是一个嵌入此类的课程:
#include <thread> // for threads
#include <chrono> // for expresssing duration
#include <atomic>
#include <iomanip>
#include <functional> // for std::ref()
using namespace std;
class progress_bar {
atomic<bool> finished;
atomic<int> n;
thread t;
public:
progress_bar() : finished(false),n(0), t(ref(*this)) { } // initiate the bar by starting a new thread
void operator() () { // function executed by the thread
while (!finished) {
this_thread::sleep_for(chrono::milliseconds(1000));
cout << "\rLoading" << setw(++n) << setfill('.') << " ";
}
}
void terminate() { // tell the thread/bar to stop
finished = true;
if (t.joinable())
t.join();
}
};
然后,您可以在代码中使用此类:
progress_bar bar;
for (long i = 0; i < 3000000000L; i++);
bar.terminate(); // you can have a delay up to 1 s
显示是原始的:\r
使显示在当前行的开头重新启动。只要您不输出任何其他内容,并且您没有显示的点数比行长度更长。
或者,您可以将其与诅咒答案相结合,以更可靠地将状态写入固定屏幕位置。
答案 1 :(得分:0)
Ncurses库(虽然很古老)能够模仿你刚才所说的。