【问题标题】:How do I get events in the X window system without pausing execution? [duplicate]如何在不暂停执行的情况下在 X 窗口系统中获取事件? [复制]
【发布时间】:2013-12-10 08:28:21
【问题描述】:

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

【问题讨论】:

  • 您是否尝试在另一个(专用)线程中调用此函数?

标签: c++ events x11


【解决方案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();

这 3 个函数是非阻塞的。 例如,如果您只想为指定的窗口生成事件,您可以这样做:

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

PS : 对不起我的英语不好

【讨论】:

  • 谢谢。你知道像这样也适用于全屏应用程序的任何功能吗?
  • 这些功能在 Windows 全屏模式下运行良好。也许你问如何获得全屏窗口?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 2010-11-24
相关资源
最近更新 更多