如何在不暂停执行的情况下在X窗口系统中获取事件?

时间:2013-12-10 08:28:22

标签: c++ events x11

我需要从X窗口系统获取事件而不暂停程序的执行。目前,我使用XNextEvent(dpy, &xev)来获取事件,但有没有办法获取事件并同时运行我自己的代码?

1 个答案:

答案 0 :(得分:1)

while (XPending(dpy))
{
    XNextEvent(dpy, &e);
    switch (e.type) 
    {
        case Expose:
            break;
        // Manage events...
        default:
            break;
    }
}

XPending(Display *display):返回关联显示的队列中的事件数。

您可以通过其中一个函数重新设置XNextEvent(dpy, &e);,仅针对指定的窗口/掩码或两个同时获取事件:

  1. XCheckTypedEvent();
  2. XCheckTypedWindowEvent();
  3. XcheckWindowEvent();
  4. 这3个功能是非阻塞的。 例如,如果您只想为指定的Window进行fecth事件,则可以执行以下操作:

    while (XcheckWindowEvent(dpy, window, your_event_mask, &e))
    {
        switch (e.type) 
        {
            case Expose:
                break;
            // Manage events...
            default:
                break;
        }
    }
    

    PS:抱歉我的英文不好