Ncurses: разница между doupdate () и refresh () для панелей

В чем разница между doupdate() а также refresh()?

Похоже, что refresh () можно заменить doupdate()Однако текст не появляется, если refresh() называется.

Кроме того, делает refresh() обновить все окна, или должны refresh() вызываться для каждого окна, которое находится внутри панели?

2

Решение

От Дэна Гукина Руководство программиста по NCurses (стр. 513):

Операция обновления в NCurses состоит из двух частей:

  • Во-первых, NCurses берет те части окна, которые были изменены или затронуты, и записывает эти части из данных окна
    структура виртуального экрана в памяти.
  • Во-вторых, содержимое виртуального экрана, которого коснулись с момента последнего обновления, отображается на терминале.

Копирование информации из оконной структуры данных в виртуальную
Экран выполняется функцией wnoutrefresh (). Обновление
виртуальный экран терминала обрабатывается другой функцией,
doupdate (). Вместе они образуют два компонента функции refresh () или
вызов wrefresh ().

Преимущество использования wnoutrefresh () появляется, когда
обновление нескольких окон. В этом случае повторные звонки
wnoutrefresh () с последующим вызовом doupdate ()
эффективнее, чем серия вызовов wrefresh (), плюс это приводит к меньшему
мерцать.

Что касается панелей, они являются своего рода обертками для окон (поэтому каждая панель имеет ровно одно окно). Должно быть достаточно позвонить update_panels() (который записывает окна на виртуальный экран в правильном порядке расположения, заданном панелями), а затем doupdate() вывести виртуальный экран в терминал.

Если вы хотите еще больше разделить свои панели, подумайте об использовании подокон.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]