用例:实时提供实时图像并在屏幕上查看。为了降低 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')的图像,所以问题是,如何做到这一点?
由于这是一个实时流媒体应用程序,因此需要速度快。
另外,上面的代码是在回调函数中执行的,所以不知道什么时候执行。
任何给定的图片要么显示,要么不显示。如果未显示,则显示任何未来图片的机会应该会增加。如果它被显示,任何未来图片的机会应该会降低。
所以,数到 100。如果你达到或超过 100,展示图片......然后减去 100:
static counter(0);
if (counter >= 100) {
showImage();
counter -= 100;
}
counter += chance;
Run Code Online (Sandbox Code Playgroud)
chance例如70,where表示“显示 70% 的图片”。通过它:
..它从那里循环。