我正在开发一个多平台的OpenGL应用程序,为此我在Linux下使用了Xlib。我知道Xlib输入处理是强烈基于事件的,但是我的程序已经做了它自己的事件处理,我更希望能够轮询xserver,以查找自上次轮询以来在活动窗口下按下或引发的任何键。
如果我必须在X下使用基于事件的输入处理,我将不得不在其他平台上做同样的事情,同时重写大量代码,因为事件方法从一个平台到另一个平台是如此不同。对我来说,轮询真的会简化事情,但我担心这样的事情会有很大的开销,而且我甚至还不能获得应该如何做的信息。我考虑过直接检查/dev/input/eventX节点,但这可能会使事情变得更加复杂,而不是简化。
我真正想知道的是如何在Linux系统上有效地轮询键盘状态。我是否在Xlib上浪费时间,我是否应该考虑其他技术或库?
发布于 2013-01-07 06:16:09
为了有效地轮询,我通常使用select (在ConnectionNumber上),等待到X的连接上发生了一些事情,然后在XPending时,我使用XNextEvent来抓取数据。除非是XPending,否则不要调用XNextEvent,否则它会阻塞。
方便的是,select提供了一种超时机制,因此您还可以轻松地停止定期等待来做其他事情(比如绘图)。
发布于 2013-01-07 07:29:30
轮询意味着,你的程序中会有一些循环。使用XPending检查是否有来自服务器的新内容(即您的投票),然后使用XNextEvent读取它。
https://stackoverflow.com/questions/14187135
复制相似问题