Книга: Основы программирования в Linux

Оптимизация обновлений экрана

Оптимизация обновлений экрана

Как вы видели в примере из упражнения 6.4, обновление множественных окон требует некоторой ловкости, но не слишком обременительно. Но может возникнуть более серьезная проблема, если нуждающийся в обновлении терминал подключен через медленное сетевое соединение. К счастью, в наши дни с ней сталкиваются очень редко, но ее обработка настолько легка, что мы рассмотрим ее просто для полноты картины.

Задача состоит в минимизации количества символов, прорисовываемых на экране, поскольку при наличии медленных линий связи рисование на экране может оказаться утомительно долгим. Библиотека curses предлагает специальный метод обновления экрана с помощью пары функций wnoutrefresh и doupdate:

#include <curses.h>
int wnoutrefresh(WINDOW *window_ptr);
int doupdate(void);

Функция wnoutrefresh определяет, какие символы необходимо отправить на экран, но не отправляет их на самом деле. Функция doupdate действительно отправляет изменения на терминал. Если вы просто вызовите wnoutrefresh, а за ней тут же функцию doupdate, эффект будет такой же, как при вызове функции wrefresh. Однако если вы хотите перерисовать ряд окон, то можете вызвать функцию wnoutrefresh для каждого окна (конечно, в нужном порядке) и затем вызвать doupdate только после последнего вызова wnoutrefresh. Это позволит библиотеке curses выполнить расчеты, связанные с обновлением экрана, по очереди для каждого окна и только после этого вывести обновленный экран. Такой подход почти всегда позволяет curses минимизировать количество символов, нуждающихся в пересылке.

Оглавление книги


Генерация: 1.286. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз