控制1秒30帧的视频频率

#include <chrono>
#include <thread>

void controlFrameRate(std::chrono::milliseconds frameDuration) {
    auto startTime = std::chrono::high_resolution_clock::now();

    // Your drawing/rendering logic here

    auto endTime = std::chrono::high_resolution_clock::now();
    auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);

    std::this_thread::sleep_for(frameDuration - elapsedTime);
}

int main() {
    const int framesPerSecond = 30;
    const std::chrono::milliseconds frameDuration(1000 / framesPerSecond);

    while (true) {
        controlFrameRate(frameDuration);
    }

    return 0;
}

1秒30帧,1秒等于1000毫秒,所以用1000除以30,得到平均一帧多长时间frameDuration

当处理完一帧图片的时候,得到elapsedTime。如果elapsedTime小于frameDuration,这个时候要让程序暂停一下,即std::this_thread::sleep_for,让进程睡一会,然后再进行下一次的工作;如果elapsedTime大于frameDuration,这样应该达不到1秒30帧的频率

这样就能控制好,是1秒30帧的频率。

全部写在主函数里,是下面的代码逻辑

#include <chrono>
#include <thread>

int main() {
    const int framesPerSecond = 30;
    const std::chrono::milliseconds frameDuration(1000 / framesPerSecond);

    while (true) {
        auto startTime = std::chrono::high_resolution_clock::now();

        // Your drawing/rendering logic here

        auto endTime = std::chrono::high_resolution_clock::now();
        auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime);

        std::this_thread::sleep_for(frameDuration - elapsedTime);
    }

    return 0;
}
相关推荐
北_鱼1 小时前
支持向量机(SVM):算法讲解与原理推导
算法·机器学习·支持向量机
Macdo_cn3 小时前
My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片
macos·音视频
MZWeiei3 小时前
PTA:运用顺序表实现多项式相加
算法
GISer_Jing3 小时前
Javascript排序算法(冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序)详解
javascript·算法·排序算法
cookies_s_s3 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
不想编程小谭3 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode
kiramario3 小时前
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
开发语言·javascript·音视频
水蓝烟雨4 小时前
[HOT 100] 2187. 完成旅途的最少时间
算法·hot 100
菜鸟一枚在这5 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada5 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯