使用X11 / Xlib确定队列中是否存在事件

时间:2013-01-16 22:53:41

标签: c++ x11 xlib

我正在研究一个X11应用程序,我正在尝试编写一个函数来处理当前队列中的所有事件,然后无阻塞地返回。

我发现的所有Xlib教程都在永久循环中使用XNextEvent,它在每个XNextEvent调用上都会阻塞,直到事件准备就绪。

我已经使用QueuedAlready查看了XEventsQueued,它似乎应该返回准备好处理的事件数,但是即使我知道有可以使用XNextEvent检索的事件,它总是返回0。

我在这里遗漏了什么,或者是否有另一种方法来确定队列中是否有可用的事件?

1 个答案:

答案 0 :(得分:0)

好吧,如果您只是使用QueuedAlready调用XEventsQueued,那么事件永远不会从连接中读取并放入队列中。使用QueuedAfterFlush调用XEventsQueued将刷新输出缓冲区,然后将连接上可用的任何事件读取到事件队列中。 XPending做同样的事情。 QueuedAfterFlush或XPending就是我所需要的。