如何执行函数 x% 的执行次数?

Tot*_*son 0 c++ algorithm

用例:实时提供实时图像并在屏幕上查看。为了降低 CPU 负载,用户应该能够丢弃图像并只显示 10% 或 50% 的图像。

如果用户选择 50%,那么应该显示每隔一个图像(不是连续显示 50 个图像,然后丢弃 50 个,因为那也是 50%。)

当前代码:

void paintImage(int everyWhatImage)
{
    showImage();
}
Run Code Online (Sandbox Code Playgroud)

100% 显示图像。

如果用户提供一个整数,比如 1,2,3 ..,意思是每一个、每一秒、每三个等等,可以使用像这样熟悉的东西:

void paintImage(int everyWhatImage)
{   
  if(counter % everyWhatImage)
  {
     showImage();
  }
  counter++;
}
Run Code Online (Sandbox Code Playgroud)

然而,上述算法不支持显示少于 50%('2')的图像,所以问题是,如何做到这一点?

由于这是一个实时流媒体应用程序,因此需要速度快。

另外,上面的代码是在回调函数中执行的,所以不知道什么时候执行。

rzw*_*oot 5

任何给定的图片要么显示,要么不显示。如果未显示,则显示任何未来图片的机会应该会增加。如果它被显示,任何未来图片的机会应该会降低。

所以,数到 100。如果你达到或超过 100,展示图片......然后减去 100:

static counter(0);
if (counter >= 100) {
    showImage();
    counter -= 100;
}
counter += chance;
Run Code Online (Sandbox Code Playgroud)

chance例如70,where表示“显示 70% 的图片”。通过它:

  • 第一张图:未显示;柜台是70。
  • 第二张图:如图;柜台在40。
  • 第三张图:如图;柜台在10。
  • 第四张图:未显示;柜台是80。
  • 第五张图:如图;柜台是50。
  • 第六张图:如图;柜台是20。
  • 第七张图:未显示;柜台在90。
  • 第八张图:如图;柜台是60。
  • 第九张图:如图;柜台是30。
  • 第十张图:如图;计数器为 0。

..它从那里循环。