首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用Xlib/X11事件处理的Lag

在C中使用Xlib/X11事件处理的Lag
EN

Stack Overflow用户
提问于 2012-12-05 08:37:52
回答 1查看 2.1K关注 0票数 2

这里是C的初学者用户。

我正在尝试使用X11/Xlib在C中构建一个库,这样我就可以将它仅用于小项目,并且在尝试处理事件以从用户获取输入(按钮按下和按键按下)时遇到了一个问题。它在一段时间内运行良好,然后随着时间的推移,它开始建立一个显着的滞后。

现在,我的程序检查是否有事件在等待,如果有,则检索它。

我认为我现在的问题是事件被存储在内存中,它使程序陷入困境。但这只是一种猜测。

任何帮助都将不胜感激。谢谢。

编辑:忘记代码(我知道我忘记了一些东西)

有问题的两个函数是:

代码语言:javascript
复制
int event_waiting()
{
    XEvent event;

    if(XCheckMaskEvent(dspy,-1,&event)) {
        if(event.type==KeyPress) {
            XPutBackEvent(dspy,&event);
            return 1;
        } else if (event.type==ButtonPress) {
            XPutBackEvent(dspy,&event);
            return 1;
        }
    } /* <<=== added missing close-curly here */
    return 0;
}

char wait()
{
    XEvent event;
    XNextEvent(dspy,&event);
    if(event.type==KeyPress) {
        saved_x = event.xkey.x;
        saved_y = event.xkey.y;
        return XLookupKeysym(&event.xkey,0);
    } else if(event.type==ButtonPress) {
        saved_x = event.xkey.x;
        saved_y = event.xkey.y;
        return event.xbutton.button;
    }
}

然后它们在主体中被这样调用,

代码语言:javascript
复制
if (event_waiting()){
  char c = wait();
  //Switch case goes here
}

编辑2:更新代码

代码语言:javascript
复制
XEvent event;
if(XCheckMaskEvent(display,-1,&event)) 
{
    if(event.type==KeyPress) {
        XPutBackEvent(display,&event);
        return 1;
    } else if (event.type==ButtonPress) {
        XPutBackEvent(display,&event);
        return 1;
    }
}
XFlush(display);
return 0;

`

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 09:11:12

随着时间的推移,延迟会变得更糟,这意味着您的事件队列中有许多未触及的事件,这会降低XCheckMaskEvent()的速度。

尝试使用XSelectInput(... ButtonPressMask | KeyPressMask)指定事件,如果没有您感兴趣的事件,则尝试使用XFlush()刷新事件队列:

代码语言:javascript
复制
    if(event.type==KeyPress) {
        XPutBackEvent(dspy,&event);
        return 1;
    } else if (event.type==ButtonPress) {
        XPutBackEvent(dspy,&event);
        return 1;
    } else {
        XFlush(dspy); // this
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13714475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档