【发布时间】:2012-12-05 00:37:51
【问题描述】:
这里是 C 的初学者。
我正在尝试使用 X11/Xlib 在 C 中构建一个库,因此我可以将它仅用于小型项目,并且在尝试处理事件以获取输入(按钮按下和按键按下)时遇到问题用户。它可以正常工作一段时间,然后随着时间的推移开始显着滞后。
现在我的程序检查是否有事件等待,如果有,则检索它。
我认为我现在的问题是事件被存储在内存中并且它使程序陷入困境。但这只是一个猜测。
任何帮助将不胜感激。谢谢。
编辑:忘记代码(我知道我忘记了什么)
有问题的两个函数是:
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;
}
}
然后像这样在 main 中调用它们,
if (event_waiting()){
char c = wait();
//Switch case goes here
}
编辑 2:更新代码
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;
`
【问题讨论】:
-
没有看到任何关于你的库如何工作的代码/信息,几乎不可能告诉你哪里出了问题......
-
event_waiting缺少一个紧卷曲。我希望我把它放在正确的位置。如果 KeyPress 和 ButtonPress 都不存在,char wait()缺少返回值,这是一个 UB 条件。