c++ - 如何实现一个不同频率的循环

假设以下 while 循环以 1kHz 运行。在没有多线程的情况下,在这个循环中运行另一段代码但频率不同(即 500Hz)的正确方法是什么?

while (1){ // running 1kHz (i.e. outer loop)
      do stuff

      if (){ // running 500Hz (i.e. inner loop)
         do another stuff
      }
}

另一个问题是假设外循环以 CPU 的最大速度运行,是否可以以外循环的百分比(即外循环的 50%)运行内循环。

回答1

最简单的方法是这样的:

int counter = 0;

while (1) {
  // do stuff

  if (++counter == 2) { // inner loop
     counter = 0;
     
     // do other stuff
  }
}

请注意,在这样的自旋循环中,不能保证外循环将以 1kHz 运行;它将以由 CPU 速度和循环内发生的工作量确定的速度运行。如果你真的需要精确的 1kHz 执行,你可能想要编写一个定时器中断来代替。可以保证的是,内部 if() 块中的代码将在外部循环的每第二次迭代中执行。

回答2

像这样的东西应该工作

unsigned int counter = 0;

while (1) {
  // do stuff
  counter+=1;
  if ((counter%2) == 0) { // inner loop

     
     // do other stuff
  }
}

相似文章

随机推荐

最新文章