【发布时间】:2016-10-03 11:11:33
【问题描述】:
我有一个具有以下基本结构的程序:
while( true )
{
if(event.type==EVENT_KEY_RELEASE || event.type==EVENT_KEY_PRESS){
XEvent xev;
XPeekEvent(display, &xev);
if (XFilterEvent(&xev, G.win)) { printf("XFilterEvent: true\r\n"); }
else
{
if(xev.type == KeyRelease || xev.type == KeyPress)
// Get keyboard character
}
}
我遇到的问题是,当我按下并释放键盘键时,它会阻塞事件队列,直到我按下另一个键(或任何其他事件,如鼠标移动和......),理想情况下我想要一个 X 功能检查事件但根本不阻塞?
更新: 我更改了我的程序并删除了无限循环,而不是我尝试在计时器踏板中执行此操作,并且我每 30 毫秒调用一次此部分,但我遇到了问题。
【问题讨论】:
-
当您调用
XPeekEvent时,是什么让您确定事件队列不为空?如果它为为空,则XPeekEvent将阻塞,直到有事件可用。 -
如果你想要一个非阻塞的“队列中是否有 y 类型的事件”函数,请参考
XCheckTypedEvent。但是,我在您提供的有限代码中看到的是,您似乎是在与 X 战斗而不是 使用它(这意味着您可能应该重新考虑您的方法并告诉我们你真正想做的事)
标签: c++ ubuntu-14.04 x11 xlib