3

doupdate()との違いは何refresh()ですか?

refresh ()の代わりに使用できるようですが、が呼び出されdoupdate()ない限りテキストは表示されません。refresh()

また、パネル内にあるrefresh()すべてのウィンドウを更新しますか、それともすべてのウィンドウに対して呼び出す必要がありますか?refresh()

4

1 に答える 1

4

Dan GookinのプログラマーズガイドからNCurses(513ページ)まで:

NCursesの更新操作は、次の2つの部分で構成されています。

  • まず、NCursesは、変更またはタッチされたウィンドウの部分を取得し、それらの部分をウィンドウデータ
    構造からメモリ内の仮想画面に書き込みます。
  • 次に、最後の更新以降にタッチされた仮想画面の内容が端末に表示されます。

ウィンドウデータ構造から仮想画面への情報のコピーは、wnoutrefresh()関数によって実行されます。ターミナルへの仮想画面の更新は、別の関数doupdate()によって処理されます。これらは一緒になって、refresh()またはwrefresh()呼び出しの2つのコンポーネントを形成します。

wnoutrefresh()を使用する利点は、複数のウィンドウを更新するときに得られます。その場合、wnoutrefresh()を繰り返し呼び出してから単一のdoupdate()を呼び出す方が、一連のwrefresh()呼び出しよりも効率的であり、ちらつきも少なくなります。

パネルに関する限り、それらはウィンドウの一種のラッパーです(したがって、各パネルには1つのウィンドウがあります)。update_panels()(パネルによって指定された正しいスタック順序でウィンドウを仮想画面に書き込む)を呼び出してから、仮想画面doupdate()を端末に出力するだけで十分です。

パネルをさらに分割する場合は、サブウィンドウの使用を検討してください。

于 2013-02-17T01:31:21.350 に答える