C++ 找出当前时间是否为新秒的开始
我正在编写一个进度条函数,并希望在执行某些任务时调用它C++ 找出当前时间是否为新秒的开始,c++,time,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 progressMessa
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;
}
替换自身,并在功能继续时填充进度条。不过,我希望每秒最多显示一次进度条。而不是:
progressBar("Iterating...", i, j);
我想:
if (time(0).milliseconds == 0) {
progressBar("Iterating...", i, j);
}
如果时间为SS:MS,则在时间为SS:00时调用该函数。所以它将发生在01:00、02:00、03:00等等。就像现在一样,它调用i
的每一次迭代,破坏性能
如何实现这一点?您只需在操作开始时存储当前时间(使用
std::chrono::staid_clock
),然后在每个步骤上检查时间是否至少迟于1秒。如果是这样,请更新进度条并存储新的当前时间。您只需在操作开始时存储当前时间(使用std::chrono::staid_clock
),然后在每个步骤上检查时间是否至少迟于1秒。如果是这样,请更新进度条并存储新的当前时间。可能需要重新考虑您提出的解决方案:如果您在0毫秒时从999毫秒变为1毫秒而没有进行测试,会发生什么情况(例如,您的进程因高优先级的工作而脱离CPU)。这是一个很好的观点。我想我可以在main()
中将全局time\t timeSeed
var设置为当前时间,然后在if
语句中,检查time(0)>timeSeed
,并在progressBar()内检查timeSeed=time(0)
function。可能需要重新考虑您提出的解决方案:如果您在0毫秒时从999毫秒到1毫秒没有进行测试,会发生什么情况(例如,您的进程被更高优先级的工作从CPU中断)。这是一个很好的观点。我想我可以在main()
中将全局time\t timeSeed
var设置为当前时间,然后在if
语句中,检查time(0)>timeSeed
,以及timeSeed=time(0)
函数中的timeSeed=time(0)
。
if (time(0).milliseconds == 0) {
progressBar("Iterating...", i, j);
}