我有一个我试图修改的应用程序,以便工作线程可以告诉窗口用新数据更新自己。
变量定义如下:
Display *d;
Window w;
XEvent exppp;
该窗口以以下代码启动:
XEvent e;
d = XOpenDisplay(NULL);
if (d == NULL)
return 0;
s = DefaultScreen(d);
w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 200, 800, 1,
BlackPixel(d, s), WhitePixel(d, s));
XSelectInput(d, w, ExposureMask | KeyPressMask);
XMapWindow(d, w);
while (1) {
XNextEvent(d, &e);
if (e.type == Expose || e.type == KeyPress) {
// redraw routine goes here
}
}
我试图用来重绘窗口的是一个可以被另一个线程调用的函数:
void graphical_out::redraw()
{
exppp.type = Expose;
XSendEvent(d, w, false, Expose, &exppp);
}
并且窗口仅在调整大小或收到按键时才会自行更新。这似乎有点像一个新手问题,但谷歌在这个问题上让我失望了。对我做错了什么有什么建议吗?