ワーカースレッドがウィンドウに新しいデータで更新するように指示できるように、変更しようとしたアプリケーションがあります。
変数は次のように定義されます。
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);
}
また、ウィンドウは、サイズが変更されたとき、またはキーが押されたときにのみ更新されます。これは初心者の質問に少し似ているようですが、Googleはこれについて私を失敗させました。私が間違っていることへの提案はありますか?