找出当前时间是否是新秒的开始

时间:2017-03-01 05:48:39

标签: c++ time

我正在编写一个进度条功能,并希望在某项任务中调用它。

void someTask() {
    int j = 500000000000;
    for (int i = 0; i < j; i++) {
        progressBar("Iterating...", i, j);
    }
}
void progressBar(string consoleOut, int current, int end) {
    stringstream progressMessage;
    string status = consoleOut;
    string endOfString = " \r";
    if (current == end) {
        status += " done!";
        endOfString = " \n";
    }
    progressMessage << status;
    for (int i = status.length(); i < 40; i++) {
        progressMessage << " ";
    }
    progressMessage << " [";
    double step = ((double)current / (double)end) * 10;
    for (int i = 0; i < floor(step); i++) {
        progressMessage << "=";
    }
    for (int i = floor(step); i < 10; i++) {
        progressMessage << " ";
    }
    progressMessage << "] " << floor(step*10) << "%";
    cout << progressMessage.str() << endOfString;
}

这将产生如下输出:

Iterating...          [          ] 0%

随着功能的继续,更换自身并填写进度条。我想最多每秒显示一次进度条。而不是:

progressBar("Iterating...", i, j);

我想:

if (time(0).milliseconds == 0) {
    progressBar("Iterating...", i, j);
}

如果时间是SS:MS,则在时间为SS:00时调用该函数。所以它会在01:00,02:00,03:00等发生。就像现在一样,它会调用i的每次迭代,从而导致性能下降。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您应该只在操作开始时存储当前时间(使用std::chrono::steady_clock),然后在每一步中检查时间是否至少等于一秒。如果是,请更新进度条并存储新的当前时间。