Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GLFW和x27的调度;使用LWJGL的s主螺纹_Java_Opengl_Lwjgl_Glfw - Fatal编程技术网

Java GLFW和x27的调度;使用LWJGL的s主螺纹

Java GLFW和x27的调度;使用LWJGL的s主螺纹,java,opengl,lwjgl,glfw,Java,Opengl,Lwjgl,Glfw,我试图调用一个异步任务,该任务每运行一次(在本例中为1/30秒)。这个滴答作响的计时器有效地控制应用程序中的每个动作何时发生 Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask(){ @Override public void run(){ //... more code ... GLFW.glfwPollEvents(); //... more

我试图调用一个异步任务,该任务每运行一次(在本例中为1/30秒)。这个滴答作响的计时器有效地控制应用程序中的每个动作何时发生

Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
    @Override
    public void run(){
        //... more code ...

        GLFW.glfwPollEvents();

        //... more code ...
    }
}, 33, 33);
但是,这不起作用,因为

此函数只能从主线程调用

(来自文件)

我如何在主线程上调用这个?当它不在主线程上运行时,应用程序崩溃。我在找像这样的东西

GLFW.dispatchMainThread(new GLFWRunnable(){
    public void run(){
        //...
    }
});
这可以在
swing
awt
中使用

EventQueue.invokeLater(new Runnable(){
    public void run(){
        //...
    }
});
但是相同的代码不适用于
GLFW


如何在
GLFW
的主线程上使用LWJGL运行任务,而不在主线程上使用
while(true)
循环?

因为GLFW的主线程必须与应用程序的主线程相同(GLFW中的一个限制;这就是它放置OS消息队列的地方,该队列似乎由swing/awt以不同的方式处理-参见我的答案)我会以相反的方式处理

我的主线程将具有永久循环(可能使用glfwWaitEvents以避免不必要地占用CPU时间)。然后,我将发布任何特定于另一个执行处理的线程的事件。您的消息处理现在与消息接收分离

这样,我就不必等待1/30秒来获取操作系统消息(当应用程序延迟打开菜单、注册单击或浏览列表时,我总是感到沮丧)

您的更新线程甚至可以休眠1/30秒(或更短时间,如果没有足够的时间,或者如果第二个高优先级队列需要工作,则再次休眠),并且作为一种极其简单的调度方法,您只需醒来检查排队事件


我上面链接到的答案有一个链接到一个执行类似操作的。他们的renderLoop将是你的updateLoop,将从队列中绘制并在再次睡觉之前进行处理,而不是更新和显示图形。

你能添加更多关于主线程和独立线程具体执行操作的详细信息吗,独立线程是如何开始的,应该如何结束的,等等,以及主线程和独立线程之间的一般关系?可能的重复;接受的答案有帮助吗?@RedRoboHood否。这个问题是关于在
GLFW
上获取主线程,而不是一般的,因为
GLFW
可能有内置实现。L正如我在问题中所说,可以使用
Swing
。因此初始化和调度
timer
的代码没有在GLFW主线程上运行?是否可以设置任何可以从单独线程触发的GLFW回调?