首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xlib键盘轮询

Xlib键盘轮询
EN

Stack Overflow用户
提问于 2013-01-07 05:46:22
回答 2查看 767关注 0票数 1

我正在开发一个多平台的OpenGL应用程序,为此我在Linux下使用了Xlib。我知道Xlib输入处理是强烈基于事件的,但是我的程序已经做了它自己的事件处理,我更希望能够轮询xserver,以查找自上次轮询以来在活动窗口下按下或引发的任何键。

如果我必须在X下使用基于事件的输入处理,我将不得不在其他平台上做同样的事情,同时重写大量代码,因为事件方法从一个平台到另一个平台是如此不同。对我来说,轮询真的会简化事情,但我担心这样的事情会有很大的开销,而且我甚至还不能获得应该如何做的信息。我考虑过直接检查/dev/input/eventX节点,但这可能会使事情变得更加复杂,而不是简化。

我真正想知道的是如何在Linux系统上有效地轮询键盘状态。我是否在Xlib上浪费时间,我是否应该考虑其他技术或库?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 06:16:09

为了有效地轮询,我通常使用select (在ConnectionNumber上),等待到X的连接上发生了一些事情,然后在XPending时,我使用XNextEvent来抓取数据。除非是XPending,否则不要调用XNextEvent,否则它会阻塞。

方便的是,select提供了一种超时机制,因此您还可以轻松地停止定期等待来做其他事情(比如绘图)。

票数 1
EN

Stack Overflow用户

发布于 2013-01-07 07:29:30

轮询意味着,你的程序中会有一些循环。使用XPending检查是否有来自服务器的新内容(即您的投票),然后使用XNextEvent读取它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14187135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档