XPeekEvent函数正在阻塞

时间:2016-10-03 11:11:34

标签: c++ ubuntu-14.04 x11 xlib

我有一个具有以下基本结构的程序:

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毫秒调用一次这个部分,但我还有问题。

1 个答案:

答案 0 :(得分:0)

XPeekEvent在不将其从队列中删除的情况下查看事件。因此,如果队列前面有一些奇怪的事件描述,并且你在无限循环中调用XPeekEvent,它会重复读取该事件,无法处理它,因此程序会锁定。