为什么每次“ for”迭代输出4次

时间:2019-04-20 13:47:41

标签: c++

我正在尝试创建一个基本计时器,此代码似乎可以根据duration中的值正确打印出毫秒数

但是有人可以告诉我为什么不管duration的值是什么,它为每个“滴答”打印输出4次,以及如何更正它,以便在每个“滴答”集上仅输出一次在duration中?我敢肯定这一定是我所忽略的简单事物,但我仍在学习C ++的基础知识,但看不到错误。

我正在iOS“ Mobile C”应用上运行它,但我不认为这是造成问题的原因。

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono;

    auto start = high_resolution_clock::now();

    int duration = 100;

    int i = 0;
    while (i <= 100)
    {
        auto now = high_resolution_clock::now();

        auto millis = duration_cast<milliseconds>(now - start).count();

        if (millis % duration == 0)
        {
            std::cout << "millis: " << millis << std::endl;
            i++;
        }
    }
}

1 个答案:

答案 0 :(得分:4)

由于我仍然很陌生,所以我无法发表评论,但是您获得4次输出的原因是因为if语句对于您的计算机在那一毫秒内4次正确,就像Jesper Juhl所说的那样。考虑使用bool以确保它仅运行一次。像

bool hasRun = false;
if (millis % duration == 0)
    {
        if (!hasRun)
        {
            std::cout << "millis: " << millis << std::endl;
            hasRun = true;
        }
    }
else
    hasRun = false;

然后,您将能够像注释中提到的那样保持无限的Arduino仿真循环,但每个duration仅使该语句响一次。