首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用C++限制循环中的FPS?

如何使用C++限制循环中的FPS?
EN

Stack Overflow用户
提问于 2016-08-03 04:55:18
回答 1查看 12K关注 0票数 26

我试图在执行交集检查的循环中限制每秒的帧数,使用带有计时器和线程的C++。

下面是我的代码:

代码语言:javascript
复制
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::chrono::system_clock::time_point lastFrame = std::chrono::system_clock::now();

while (true)
{
    // Maintain designated frequency of 5 Hz (200 ms per frame)
    now = std::chrono::system_clock::now();
    std::chrono::duration<double, std::milli> delta = now - lastFrame;
    lastFrame = now;

    if (delta.count() < 200.0)
    {
        std::chrono::duration<double, std::milli> delta_ms(200.0 - delta.count());
        auto delta_ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(delta_ms);
        std::this_thread::sleep_for(std::chrono::milliseconds(delta_ms_duration.count()));
    }

    printf("Time: %f \n", delta.count());

    // Perform intersection test

}

我遇到的问题是,增量的每个其他输出都显示出很小的量,而不是我目标的~200ms/帧:

代码语言:javascript
复制
Time: 199.253200
Time: 2.067700
Time: 199.420400
Time: 2.408100
Time: 199.494200
Time: 2.306200
Time: 199.586800
Time: 2.253400
Time: 199.864000
Time: 2.156500
Time: 199.293800
Time: 2.075500
Time: 201.787500
Time: 4.426600
Time: 197.304100
Time: 4.530500
Time: 198.457200
Time: 3.482000
Time: 198.365300
Time: 3.415400
Time: 198.467400
Time: 3.595000
Time: 199.730100
Time: 3.373400

对于为什么会发生这种情况,有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-03 05:10:14

交替的增量时间是由一个逻辑问题引起的:您正在根据之前帧的持续时间(根据帧持续时间的计算方式)向一帧添加延迟。这意味着在一个长帧(~200ms)之后,您不会应用延迟,而是得到一个短帧(几毫秒),然后触发下一帧的延迟,给出一个长帧,依此类推。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38730273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档