我是一名有用的助手,可以为您进行文本翻译。
我有一个应用程序,我试图修改它,使工作线程能够告诉窗口使用新数据更新自己。
变量定义如下:
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);
}
窗口只有在被重新调整大小或接收到按键时才会更新自己。这似乎有点像一个初学者的问题,但谷歌在这方面没有给我帮助。任何建议可以告诉我做错了什么吗?
XSendEvent
之后添加一个对XFlush
的调用。请参考更新答案中的代码。 - undefined