我有一个具有以下基本结构的程序:
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功能检查事件但根本没有阻止?
更新: 我改变了我的程序并删除了infimit循环,而不是我尝试在计时器步骤中执行此操作,并且我每30毫秒调用一次这个部分,但我还有问题。
答案 0 :(得分:0)
XPeekEvent在不将其从队列中删除的情况下查看事件。因此,如果队列前面有一些奇怪的事件描述,并且你在无限循环中调用XPeekEvent,它会重复读取该事件,无法处理它,因此程序会锁定。