ここで何かトリッキーに聞こえますが、実際には Xlib を使用していくつかのウィンドウを描画しています。1 つは 2D の結果を画像にプロットするためのもので、これはすべての計算が完了したときにのみ描画されます。もう1つは、「処理中の計算」と表示される単純なウィンドウです。
- ですから、微積分を始める前に、「プロセス中の微積分という単純なウィンドウを見せてください」と呼びます。
- 次に、計算を実行して結果をプロットする関数を呼び出します。
- 次に、「計算中の単純なウィンドウを表示しないでください」と呼びます。
しかし、問題は、計算中に「簡単なウィンドウ「計算中」を表示」が表示されず、計算の結果の画像が表示されたときに一瞬だけ表示され、消えてしまうことです。私はいくつか入れようとしますsleep()
が、それは問題を解決しません。そのような問題を引き起こす可能性のあるものは何ですか?私は C++ のコースで既にそのような問題に遭遇しました。当時、私はコンソールで作業していましたが、そのような問題の理由は見つかりませんでした。
上司のように対処するのに役立つ説明とヒントを誰か教えてもらえますか?
ここに私のコードのsh ..の一部:
switch(e.type/*xlibevent*/){
.
.
.
case KeyRelease :
switch(keyRelease()){ // keyRelease just recognize wich key was released
.
.
. // w3w1 = window "calculus in process"
case 3 : w3w1.switcher(); doCalculus(&w1); w3w1.switcher(); break;
.
.
.
.
.
.
}
テストを行ったところ、同じ結果でスワップdoCalculus(&w1)
しましたsleep(3)
が、ウィンドウに「処理中の微積分」が表示されません
訂正がありますswitcher()
void switcher(){
if(this->visible==0){
XMapWindow(dpy,this->window); // what I though before : has to map the window
// what I think now : request to map the window
XDrawString(dpy, this->window, this->gc, 10, 14, text.c_str(), text.length());
XFlush(dpy); // dats what missed, not sure that efficient to flush the dpy
// but I deal with the part of xlib I know, I will check further
// about that
visible=1;
}else{
XUnmapWindow(dpy,this->window);
XFlush(dpy); //...
visible=0;
}