如何执行一个函数 x% 的执行次数?
How to execute a function x% of the times it is to be executed?
用例:实时提供实时图像,可以在屏幕上查看。为了降低 CPU 负载,用户应该能够丢弃图像,只显示 10% 或 50% 的图像。
如果用户选择 50%,则应显示所有其他图像(不是连续 50 张图像,然后丢弃 50 张,因为这也是 50%..(
当前代码:
void paintImage(int everyWhatImage)
{
showImage();
}
显示图像 100% 的时间。
如果用户提供一个整数,如 1,2,3 ..,表示每一、每一秒、每三等,可以使用像这样熟悉的东西:
void paintImage(int everyWhatImage)
{
if(counter % everyWhatImage)
{
showImage();
}
counter++;
}
但是,上述算法不支持显示少于 50%("2"(的图像,因此问题是,如何做到这一点?
由于这是一个实时流媒体应用程序,因此需要快速。
此外,上面的代码是在回调函数中执行的,因此不知道何时执行。
任何给定的图片要么显示,要么不显示。如果没有显示,那么未来显示任何图片的机会应该会增加。如果显示它,任何未来图片的机会都应该会下降。
因此,最多数到 100。如果您上或超过 100 个,请出示图片...并减去 100:
static counter(0);
if (counter >= 100) {
showImage();
counter -= 100;
}
counter += chance;
其中chance
例如70
,这意味着"显示70%的图片"。通过它:
- 第一张图片:未显示;计数器为70。
- 第二张图片:如图所示;计数器为40。
- 第三张图片:如图所示;计数器位于 10。
- 第四张图片:未显示;计数器为80。
- 第五张图片:如图所示;计数器为50。
- 第六张图片:如图所示;计数器为20。
- 第七张图片:未显示;计数器为90。
- 第八张图片:如图所示;计数器为60。
- 第九张图片:如图所示;计数器为30。
- 第十张图片:如图所示;计数器为 0。
.. 它从那里循环。
在"运行余额"中保存给定的比例。 每次达到至少 1.00 时,"兑现"图像的节省。
以 27% 为例...
show_count = 0.00
ratio = 0.27
while (we have more images to show) {
show_count += ratio
if (show_count >= 1.00) {
show_image()
show_count -= 1.00
}
这个问题的其他答案似乎都实现了计数器,所以我想我会建议一种概率方法。每次调用函数时,您可以生成一个介于 0 和 1 之间的随机数:
random = ((double) rand() / (RAND_MAX))
然后,如果随机数低于要显示的图像的规定百分比,则显示图像。 否则,请丢弃它。
相关文章:
- 执行函数时导致崩溃的变量
- 在多个时间戳处执行函数
- 程序不会执行函数 c++
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在 c++ 的类声明中执行函数?
- 从 std::vector 迭代器中执行函数指针
- 异步 60 秒延迟后C++执行函数?
- 如果发生错误,则返回错误值,否则,继续执行函数
- 执行函数两次
- C++11:如何在 n 秒后在主线程中执行函数
- C++执行函数和 lambda 内部
- 从主线程C 11执行函数调用的线程
- 现代C++执行函数返回指针的方法
- 为什么Win API线程执行函数,而标准线程则没有
- varargs宏以执行函数调用或将其转换为字符串
- 单步执行函数,但不进入VS2017的参数评估
- 加载 Lua 文件并使用变量而不执行函数
- 尽可能在编译时执行函数契约
- 在QT应用程序中创建并执行函数
- 如何使用boostsio_service.post()执行函数并使用数组或指针作为参数