Руководство программиста для Linux


Обновление терминала


Как написано в обзоре, окна ncurses есть отображения в памяти. Это означает, что любое изменение окна не отражается на физическом экране до тех пор, пока не будет произведено обновление. Это оптимизирует вывод на экран, поскольку вы получаете возможность совершать множество действий, а затем лишь единожды вызвать обновление, чтобы напечатать его на экране. В противном случае на терминале отражалось бы каждое изменение, что ухудшало бы исполнение ваших программ. * int refresh() int wrefresh(win)

refresh() копирует stdscr на терминал, а wrefresh(win) копирует изображение окна в stdscr и затем делает curscr подобным stdscr. * int wnoutrefresh(win) int dourdate()

wnoutrefresh(win) копирует окно win только в stdscr. Это означает, что вывода на терминал не производится, но виртуальный экран stdscr на самом деле выглядит именно так, как того хочет программист. doupdate() произведет вывод на терминал. Программа может менять различные окна, вызывая wnoutrefresh(win) для каждого окна, а затем достаточно один раз вызвать doupdate(), чтобы обновить физический экран.

Допустим, мы имеем следующую программу с двумя окнами. Мы изменяем оба окна, меняя несколько линий текста. Напишем cgangewin(win) с wrefresh(win).

main() changewin(WINDOW *win) { { WINDOW *win1,*win2; ... /* здесь мы изменяем */ ... ... /* строки */ changewin(win1); wrefresh(win); changewin(win2); return; ... } }

Тогда ncurses обновит терминал дважды, а это замедлит исполнение нашей программы. Благодаря doupdate() мы изменим changewin(win) и нашу основную функцию, добившись этим лучшего исполнения.

main() changewin(WINDOW *win) { { WINDOW *win1,*win2; ... /* здесь мы изменяем */ ... ... /* строки */ changewin(win1); wnoutrefresh(win); changewin(win2); return; doupdate(); } ... } * int redrawwin(win) int wredrawln(win, bline, nlines)

Используйте эти функции, когда перед записью чего-нибудь нового требуется выбросить несколько линий или целый экран (может быть линии попорчены или что-либо вроде этого). * int touchwin(win) int touchline(win, start, count) int wtouchln(win, y, n, changed) int untouchwin(win)




Начало  Назад  Вперед



Книжный магазин