作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 xlib 的初学者。我尝试根据以下示例使用 select() 来编写 Xwindow 应用程序:how to quit the blocking of xlib's XNextEvent .
但是上面提到的代码在 XPending 函数中崩溃了。因此,我尝试隔离问题,在我的系统上,即使从我的角度来看,非常简单的示例也会在第 28 行崩溃。由于进行了多次测试,我认为是通过调用 XFlush() 在内部崩溃的。在标有“//<- CRASH”的行中,我认为 XPending 应该返回 0。这是正确的吗?
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
Display *dis;
Window win;
int x11_fd;
fd_set in_fds;
struct timeval tv;
XKeyEvent ev;
int main() {
dis = XOpenDisplay(NULL);
win = XCreateSimpleWindow(dis, RootWindow(dis, 0), 1, 1, 256, 256, \
0, BlackPixel (dis, 0), BlackPixel(dis, 0));
XSelectInput(dis, win,
KeyPressMask | KeyReleaseMask );
XMapWindow(dis, win);
XFlush(dis);
printf("Xpending: %d\n",XPending(dis));
printf("Xpending: %d\n",XPending(dis));
XPeekEvent(dis, (XEvent*) &ev);
printf("type: %d button: 0x%X state: 0x%x\n",ev.type, ev.keycode, ev.state);
int j = XPending(dis); // <- CRASH
printf("XPending: %d\n",j);
return 0;
}
这是一个错误还是我误解了 xlib 中的主要概念?
最佳答案
XKeyEvent 比 XEvent 更大(以字节为单位)当您收到更大的事件时,ev 变量将溢出。使用 malloc,您实际上获得了比您要求的更多的字节,从而解决了问题。更好的解决方案是使用 XEvent ev;
XEvent ev;
...
XNextEvent( & ev );
...
printf( "%d\n", ev.xkey.keycode
);
关于C 和 xlib : Crash in XPending() in a very simple program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578601/
我是一名优秀的程序员,十分优秀!