我正在开发一个多平台OpenGL应用程序,我正在Linux下使用Xlib。我知道Xlib输入处理是基于事件的,但我的程序已经自己进行了事件处理,而且我更愿意在xserver中查询自上次轮询以来在活动窗口下按下或引发的任何键。
如果我必须在X下使用基于事件的输入处理,我必须对其他平台做同样的事情,同时重写大量代码,因为事件方法从一个平台到另一个平台是如此不同。轮询对我来说真的会简化一些事情,但我担心这样的事情会有很大的开销,我甚至无法获得有关如何完成的信息。我曾想过直接检查/ dev / input / eventX节点,但这可能会使事情变得更复杂,而不是简化。
我真正想知道的是如何在Linux系统上有效地轮询键盘状态。我是否在浪费时间与Xlib,我应该考虑其他技术或库吗?
答案 0 :(得分:1)
为了有效地进行投票,我通常会使用select
(在ConnectionNumber
上),等到与X的连接发生某些事情然后XPending
我使用XNextEvent
来抢东西。除非XNextEvent
,否则不要致电XPending
,否则会阻止。
方便的是,select
提供了一种超时机制,因此您也可以非常容易地停止等待其他事情(如绘图)。
答案 1 :(得分:0)
轮询意味着你在程序中的某个地方会有一些循环。使用XPending检查服务器是否有新的东西(这是你的民意调查),然后用XNextEvent读取它。