我正在开发一个多平台的opengl应用程序,为此我在linux下使用xlib。我知道xlib输入处理是基于事件的,但是我的程序已经完成了它自己的事件处理,而且我更希望能够轮询xserver,查找自上次轮询以来在活动窗口下按下或引发的任何键。
如果我必须在x下使用基于事件的输入处理,那么在重写大量代码的同时,我也必须在其他平台上使用相同的方法,因为不同平台的事件方法是如此不同。对我来说,投票确实可以简化一些事情,但我担心这样的事情会带来很大的开销,我甚至无法获得应该如何进行投票的信息。我曾想过直接检查/dev/input/eventx节点,但这可能会使事情更复杂,而不是简化。
我真正想知道的是如何在Linux系统上有效地轮询键盘状态。我在xlib上浪费时间了吗?我应该考虑其他技术或库吗?
最佳答案
为了有效地进行投票,我通常使用select
(onConnectionNumber
),等到x的连接发生问题,然后使用XPending
获取数据。除非XNextEvent
否则不要调用XNextEvent
,否则它将阻塞。
方便的是,XPending
提供了一个超时机制,因此您也可以停止周期性的等待,以便很容易地执行其他操作(如绘图)。
关于linux - Xlib键盘轮询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14187135/