c++ - 每 x 秒运行一次代码,无论在循环内执行多长时间

标签 c++ loops

我正在尝试让 LED 灯随着特定歌曲的节拍闪烁。这首歌恰好有 125 bpm。
我编写的代码一开始似乎可以工作,但它运行的时间越长,LED 闪烁和下一节拍开始之间的时间差异就越大。 LED 似乎闪烁得有点太慢了。

我认为发生这种情况是因为 lastBlink 有点依赖于之前发生的闪烁来保持同步,而不是使用一个静态初始值来同步到...

unsigned int bpm = 125;
int flashDuration = 10;
unsigned int lastBlink = 0;
for(;;) {
    if (getTickCount() >= lastBlink+1000/(bpm/60)) {
        lastBlink = getTickCount();
        printf("Blink!\r\n");
        RS232_SendByte(cport_nr, 4); //LED ON
        delay(flashDuration);
        RS232_SendByte(cport_nr, 0); //LED OFF
    }
}

最佳答案

将值添加到 lastBlink,而不是重新读取它,因为 getTickCount 可能跳过了比想要等待的确切节拍更多的内容。

lastblink+=1000/(bpm/60);

关于c++ - 每 x 秒运行一次代码,无论在循环内执行多长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35468032/

相关文章:

python - 使用 python itertools 来管理嵌套的 for 循环

c++ - OpenGL/Glut 无法在其上绘制 [

c++ - 错误 C2872 : 'range_error' : ambiguous symbol

c++ - 使用基类指针访问派生类成员

loops - 向 Excel 的 vba 代码添加循环

java - scala 迭代 java hashSet

javascript - 迭代javascript中的对象集合并从该函数返回true

c++ - 在两个不同的程序之间发送/接收数据

c++ - 如何在 tic tac toe 游戏中检查 2 维数组的赢家

javascript - 为什么内部 Javascript 循环会阻止外部循环中断(即无限循环)?