在本示例中,我们通过一个简单的 C++ 头文件 progress_indicator.hpp
来实现一个控制台进度条。该进度条可以通过自定义函数指针传递回调函数,以适应不同的应用场景。
#pragma once
#include
#include
#include
typedef int(*ProgressCallback)(double percentage, const char *message, void *userData);
int displayProgress(double percentage, const char *message, void *userData) {
int tick = (std::min)(40, (std::max)(0, static_cast<int>(percentage * 40.0)));
static int lastTick = -1;
if (tick < lastTick && lastTick >= 39) { lastTick = -1; }
if (tick <= lastTick) return true;
while (tick > lastTick) {
++lastTick;
if (lastTick % 4 == 0) fprintf(stdout, "%d", (lastTick / 4) * 10);
else fprintf(stdout, ".");
}
if (tick == 40) fprintf(stdout, " - 完成.
");
else fflush(stdout);
return true;
}
接下来,我们将通过一个简单的测试程序来演示如何使用上述进度条功能。
#include
#include
#include "progress_indicator.hpp"
using namespace std;
void executeTask(int size, ProgressCallback callback, void *userData);
int main() {
void *userData = nullptr;
int taskSize = 10;
executeTask(taskSize, displayProgress, userData);
return 0;
}
void executeTask(int size, ProgressCallback callback, void *userData) {
for (int i = 0; i < size; i++) {
Sleep(1000);
callback(((i + 1) / static_cast<double>(size)), "", userData);
}
}