在Chrono计划中永远不会触发条件声明

时间:2017-01-04 01:57:31

标签: c++ chrono

摘要:

我在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?

1 个答案:

答案 0 :(得分:2)

您遇到了cout问题,而不是chrono问题。问题是您使用cout进行打印,如果不喜欢它,则不会刷新。

cerr将在换行符时刷新。更改为cerr并添加\n,您就会得到您期望的结果。

std::cerr << "You've counted to " << counter() << "in one second!\n";