我正在尝试创建一个基本计时器,此代码似乎可以根据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++;
}
}
}
答案 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
仅使该语句响一次。