ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GLFW 3.0 / C中的空闲线程时间

2019-11-23 05:50:37  阅读:270  来源: 互联网

标签:glfw linux opengl c-4


我试图强迫GLFW 3.0停止对我的CPU的破坏,然后再将其作为促进学习API的框架前进.我以http://www.glfw.org/documentation.html为例,开始寻找限制它的方法.

目前,我要做的是:

#include <iostream>
#include <chrono>
#include <thread>
#include <GLFW/glfw3.h>

int main(void)
{
    typedef std::chrono::high_resolution_clock Clock;
    typedef std::chrono::milliseconds milliseconds;

    Clock::time_point currentTime, newTime;
    milliseconds frameTime;

    GLFWwindow* window;

    if (!glfwInit())
        return -1;

    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);

    while (!glfwWindowShouldClose(window))
    {
        currentTime = Clock::now();

        glfwSwapBuffers(window);

        glfwPollEvents();

        newTime = Clock::now();

        frameTime = std::chrono::duration_cast<milliseconds>(newTime - currentTime);

        if(frameTime.count() < 16)
            std::this_thread::sleep_for(milliseconds(16 - frameTime.count()));

        std::cout << "Frame time: " << frameTime.count() << "ms" << std::endl;
}

glfwTerminate();
return 0;

}

由于GLFW已经将自身限制为60fps,因此我认为这可能有效.而且,的确,它将主循环运行时的CPU使用率降低了一半.这可能已经足够了,但是我真正想知道的是:

一个同轴电缆GLFW如何等待信号并释放CPU,而不是仅仅在while循环中烘烤轮胎?我无法想象它完全缺少该功能.

解决方法:

一般来说,您不需要.通常,您的程序实际上在那段时间做了一些事情.如果您无事可做,那么您会花一些时间进行其他流程.如果没有其他进程可运行,则只需吞下它,直到准备就绪即可.

渲染器通常会尝试尽可能快地渲染,因为它们通常将无法超越GPU.大多数游戏就是这样工作的.他们试图尽快执行.如果CPU的速度比预期的要快得多,则它们可能具有计时器来产生一些产量,但通常,它们只是让渲染器运行.

同样,期望sleep_for实际上以毫秒(16-frameTime.count())时间返回也是不合理的.这只是一个最低的估计,而不是要求.

最好改用yield.

标签:glfw,linux,opengl,c-4
来源: https://codeday.me/bug/20191123/2065438.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有