linux 如何将poll/epoll与GLFW事件轮询一起使用

qhhrdooz  于 2023-02-07  发布在  Linux
关注(0)|答案(1)|浏览(129)

我需要在GLFW事件轮询之上使用epoll。我的第一次尝试是将X11套接字描述符添加到epoll并等待事件。如果描述符变得可读,我使用glfwPollEvents()来排出X11事件。
但是,令我惊讶的是,X11文件描述符始终是可读的,这会产生忙碌循环。
问题是,如何将GLFW事件轮询与某个外部事件轮询接口一起使用。

s4n0splo

s4n0splo1#

由于glfwPollEventspollepoll_wait是非阻塞的(如果timeout设置为零,则对于pollepoll),为什么不依次调用它们。GLFW将处理X11事件,而pollepoll_wait将处理IO事件,
例如:

while (active) {
    glfwPollEvents();   //handle queued only display events
    epoll_wait(..., 0); //handle io events
    nanosleep(...);     //instead of sleep, 
                        //use the timeout functionality 
                        //of the addressed functions (e.g. glfwWaitEventsTimeout)
}

如果你必须用你自己的事件结构填充一个事件队列,那么在事件处理程序中构建它们并将它们推送到队列中,如果你依次调用glfw和poll,那么就不会有任何异步的危险。

相关问题