我正在尝试制作一个基本计时器,这段代码似乎根据duration
中的值正确打印出毫秒数
但有人可以告诉我为什么它为每个'tick'打印输出4次,无论duration
的值是什么,以及如何纠正它以便它只在duration
中设置的每个'tick'输出一次?我敢肯定它一定是简单的我忽略了但我还在学习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++;
}
}
}
因为我还是新来的,所以我不能发表评论,但是你得到4次输出的原因是因为如果声明在你的机器上的那一毫秒真实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
只有声明响一次。