XNextEvent 没有返回?
XNextEvent is not returning?
我是 c 语言和 xorg-server 编程的新手。我希望做任何事情,但 XNextEvent 只会 return 它被调用的前三次。之后它会再 return 直到我调用一些事件,例如调整 window 的大小或进入全屏。因此,如果 window 处于停滞状态,XNextEvent 将不会 return。这一定是我的一些明显错误吧?源代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#define WIDTH 1000
#define HEIGHT 600
#define CELL_SIZE 10
Display *dis;
int screen;
Window win;
XEvent event;
GC gc;
void init(){
dis = XOpenDisplay(NULL);
if (dis == NULL){
fprintf(stderr, "Cannot open display");
exit(1);
}
screen = DefaultScreen(dis);
win = XCreateSimpleWindow(
dis,
RootWindow(dis, screen),
100, 100, WIDTH, HEIGHT, 1,
BlackPixel(dis, screen),
WhitePixel(dis, screen)
);
XSelectInput(dis, win, ExposureMask | KeyPressMask);
gc = XCreateGC(dis, win, 0, 0);
XSetBackground(dis, gc, WhitePixel(dis, screen));
XSetForeground(dis, gc, BlackPixel(dis, screen));
XClearWindow(dis, win);
XMapRaised(dis, win);
}
void close_program(){
XFreeGC(dis, gc);
XDestroyWindow(dis, win);
XCloseDisplay(dis);
exit(0);
}
int main(){
init();
while (1){
XNextEvent(dis, &event);
if (event.type == Expose){
printf("Will this execute? Prolly not.\n");
}
printf("Will this execute? no.\n");
}
return 0;
}
我知道我没有使用 close_program
功能,还在研究中
如果队列中没有待处理的事件,XNextEvent 将阻塞直到有一个。 documentation 就是这么说的。
我是 c 语言和 xorg-server 编程的新手。我希望做任何事情,但 XNextEvent 只会 return 它被调用的前三次。之后它会再 return 直到我调用一些事件,例如调整 window 的大小或进入全屏。因此,如果 window 处于停滞状态,XNextEvent 将不会 return。这一定是我的一些明显错误吧?源代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#define WIDTH 1000
#define HEIGHT 600
#define CELL_SIZE 10
Display *dis;
int screen;
Window win;
XEvent event;
GC gc;
void init(){
dis = XOpenDisplay(NULL);
if (dis == NULL){
fprintf(stderr, "Cannot open display");
exit(1);
}
screen = DefaultScreen(dis);
win = XCreateSimpleWindow(
dis,
RootWindow(dis, screen),
100, 100, WIDTH, HEIGHT, 1,
BlackPixel(dis, screen),
WhitePixel(dis, screen)
);
XSelectInput(dis, win, ExposureMask | KeyPressMask);
gc = XCreateGC(dis, win, 0, 0);
XSetBackground(dis, gc, WhitePixel(dis, screen));
XSetForeground(dis, gc, BlackPixel(dis, screen));
XClearWindow(dis, win);
XMapRaised(dis, win);
}
void close_program(){
XFreeGC(dis, gc);
XDestroyWindow(dis, win);
XCloseDisplay(dis);
exit(0);
}
int main(){
init();
while (1){
XNextEvent(dis, &event);
if (event.type == Expose){
printf("Will this execute? Prolly not.\n");
}
printf("Will this execute? no.\n");
}
return 0;
}
我知道我没有使用 close_program
功能,还在研究中
如果队列中没有待处理的事件,XNextEvent 将阻塞直到有一个。 documentation 就是这么说的。