我需要在GLFW事件轮询之上使用epoll。我的第一次尝试是将X11套接字描述符添加到epoll并等待事件。如果描述符变得可读,我使用glfwPollEvents()来排出X11事件。但是,令我惊讶的是,X11文件描述符始终是可读的,这会产生忙碌循环。问题是,如何将GLFW事件轮询与某个外部事件轮询接口一起使用。
GLFW
epoll
X11
glfwPollEvents()
s4n0splo1#
由于glfwPollEvents、poll和epoll_wait是非阻塞的(如果timeout设置为零,则对于poll和epoll),为什么不依次调用它们。GLFW将处理X11事件,而poll或epoll_wait将处理IO事件,例如:
glfwPollEvents
poll
epoll_wait
timeout
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,那么就不会有任何异步的危险。
1条答案
按热度按时间s4n0splo1#
由于
glfwPollEvents
、poll
和epoll_wait
是非阻塞的(如果timeout
设置为零,则对于poll
和epoll
),为什么不依次调用它们。GLFW将处理X11事件,而poll
或epoll_wait
将处理IO事件,例如:
如果你必须用你自己的事件结构填充一个事件队列,那么在事件处理程序中构建它们并将它们推送到队列中,如果你依次调用glfw和poll,那么就不会有任何异步的危险。