Основы программирования в Linux
Шрифт:
Оптимизация обновлений экрана
Как вы видели в примере из упражнения 6.4, обновление множественных окон требует некоторой ловкости, но не слишком обременительно. Но может возникнуть более серьезная проблема, если нуждающийся в обновлении терминал подключен через медленное сетевое соединение. К счастью, в наши дни с ней сталкиваются очень редко, но ее обработка настолько легка, что мы рассмотрим ее просто для полноты картины.
Задача состоит в минимизации количества символов, прорисовываемых на экране, поскольку при наличии медленных линий связи рисование на экране может оказаться утомительно долгим. Библиотека curses предлагает специальный метод обновления
Функция
Вложенные окна
Теперь, когда мы рассмотрели множественные окна, остановимся на специальном случае множественных окон, называемом вложенными окнами или подокнами. Создаются и уничтожаются вложенные окна с помощью следующих вызовов:
У функции
На первый взгляд вложенные окна кажутся бесполезным экспериментом. Почему не изменять просто родительское окно? Основная сфера их применения — предоставление простого способа прокрутки другого окна. Потребность в прокрутке небольшой области экрана удивительно часто возникает при написании программ с использованием curses. Создав вложенное окно и прокручивая его, вы добьетесь желаемого результата.
Одно
Выполните упражнение 6.5.
Теперь, когда вы познакомились с новыми функциями, этот короткий пример покажет, как они действуют и чем отличаются от функций окна, применявшихся ранее.
1. Начальная секция кода программы subscl.c инициализирует отображение базового окна с некоторым текстом:
2. Теперь создайте новое подокно с прокруткой. Как рекомендовалось, вам следует перед обновлением экрана "коснуться" родительского окна:
3. Сотрите содержимое вложенного окна, выведите в нем текст и обновите его. Прокрутка текста обеспечивается циклом:
4. Завершив цикл, удалите вложенное окно и обновите основной экран:
К концу программы вы увидите вывод, показанный на рис. 6.6.
Рис. 6.6
Как это работает
Аспирант
3. Рунный маг
Фантастика:
боевая фантастика
рейтинг книги
Убийца
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
рейтинг книги
Скаут
1. Родезия
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Как я строил магическую империю 15
15. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
рейтинг книги
Двойник Короля 5
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Чужак из ниоткуда 3
3. Чужак из ниоткуда
Фантастика:
космическая фантастика
альтернативная история
рейтинг книги
Газлайтер. Том 29
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
На Берлин!
2. Моё пространственное убежище
Фантастика:
фэнтези
боевая фантастика
рпг
постапокалипсис
рейтинг книги
Князь Андер Арес 2
2. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
рейтинг книги
Вперед в прошлое 9
9. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Учитель из прошлого тысячелетия
6. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
рейтинг книги