我在C ++中编写了一个处理Chrono库的简短程序,用于实验目的。我希望CPU在一秒钟内尽可能高的数量,显示它计算的内容,然后在无限循环内重复该过程。
#include <iostream>
#include <chrono>
int counter()
{
int num = 0;
auto startTime = std::chrono::system_clock::now();
while (true)
{
num++;
auto currentTime = std::chrono::system_clock::now();
if (std::chrono::duration_cast<std::chrono::seconds>(currentTime - startTime).count() == 1)
return num;
}
}
int main()
{
while(true)
std::cout << "You've counted to " << counter() << "in one second!";
return 0;
}
我的程序中的条件语句:
if (std::chrono::duration_cast<std::chrono::seconds>(currentTime - startTime).count() == 1)
未被触发,因为currentTime的值 - startTime永远不会等于也不会超过1。这可以通过将运算符'=='替换为'&lt;'来证明,它输出不正确的结果,而不是完全没有输出。我不明白为什么不满足这个条件;如果这个程序在一个点从系统时钟收集时间,然后反复将它与当前时间进行比较,那么差值的整数值是否应该在某个时刻等于1?
答案 0 :(得分:2)
您遇到了cout
问题,而不是chrono
问题。问题是您使用cout
进行打印,如果不喜欢它,则不会刷新。
cerr
将在换行符时刷新。更改为cerr
并添加\n
,您就会得到您期望的结果。
std::cerr << "You've counted to " << counter() << "in one second!\n";