Java glfw pollevents()非常非常慢

Java glfw pollevents()非常非常慢,java,opengl,lwjgl,glfw,Java,Opengl,Lwjgl,Glfw,我一直在对我的游戏引擎进行基准测试,发现了一个犯规的罪魁祸首: glfwPollevents() 我已经对它进行了彻底的计时,95%的时间它的行为符合预期,但有时它会占用我更新间隔的5-200%(即1/60秒)。我真的不知道是什么原因造成的。在这些庞大的民意调查中,没有人调用我定义的回调。一切都静悄悄的。这完全是不可预测的 我有一些理论: 1.调度程序在函数中的某个位置中断。这不太可能,我在循环的其他部分也会看到同样的行为,但我没有看到 有一种邪恶的召唤,我不知道有什么地方被召唤并吞噬了时间 l

我一直在对我的游戏引擎进行基准测试,发现了一个犯规的罪魁祸首:

glfwPollevents()

我已经对它进行了彻底的计时,95%的时间它的行为符合预期,但有时它会占用我更新间隔的5-200%(即1/60秒)。我真的不知道是什么原因造成的。在这些庞大的民意调查中,没有人调用我定义的回调。一切都静悄悄的。这完全是不可预测的

我有一些理论: 1.调度程序在函数中的某个位置中断。这不太可能,我在循环的其他部分也会看到同样的行为,但我没有看到

  • 有一种邪恶的召唤,我不知道有什么地方被召唤并吞噬了时间

  • lwjgl问题。LWJGL是glfw的包装器,因此可以在Java中使用,我就是这么做的

  • 司机,但是哪个

  • glfwPollEvents();是特定于操作系统的系统调用的包装器,使您能够检查应用于窗口的任何事件。有很多事情可以算作事件,包括用户级的东西,比如选择或调整窗口大小,但也包括GLFW不允许您访问的系统级的东西。有很多事情可能会像你描述的那样导致短暂的中断/挂起


    一般来说,最好的建议是在不同的线程上处理渲染,并使用消息队列指示主线程执行“主线程关键任务”(如打开新窗口或其他类似重要任务)。

    您安装了哪些回调?如果它真的按照您讨论的方式运行,我怀疑VSYNC处于启用状态,可能它卡在了刷新窗口回调中。我只为键和鼠标创建了回调,而不是窗口。如果你没有创造它,它就不会捉弄你,对吧?