Java GLFW和x27的调度;使用LWJGL的s主螺纹
我试图调用一个异步任务,该任务每运行一次(在本例中为1/30秒)。这个滴答作响的计时器有效地控制应用程序中的每个动作何时发生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
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回调?