Пример: Adobe PageMaker


 

Рассмотрим использование потоков на примере приложения Adobe Page­Maker, работающего под управлением операционной системы Linux. Программа PageMaker является настольным издательским средством, предназначенным для создания и форматирования документов. Для оптимизации скорости отклика этого приложения была выбрана потоковая структура, показанная на рис. 4.5 [KRON90]. Три потока активны всегда — поток, отвечающий за обработку собы­тий, поток, обновляющий экран, и служебный поток.

Операции, на которые требуется много времени (печать, импорт данных и заливка), выполняются в служебном потоке программы PageMaker, чтобы не блокировать этими операциями возможность обработки поступающих сообще­ний. В этом же потоке происходит большая часть инициализации программы, что позволяет избежать простоя, который мог бы возникнуть при создании ново­го документа или открытии уже существующего. Отдельный поток служит для обработки сообщений о новых событиях.

 

Синхронизация служебного потока и потока обработки событий является непростой задачей. Пользователь может продолжать набирать текст или работать с мышью, активизируя тем самым поток обработки событий, в то время как служебный поток будет все еще занят. При возникновении подобного конфликта PageMaker фильтрует сообщения и воспринимает только основные из них, та­кие, как запрос на изменение размера окна.

О завершении выполнения задания свидетельствует сообщение, поступаю­щее из служебного потока. Пока это сообщение не будет получено, возможности пользователя в программе PageMaker ограничены. Об этом свидетельствует от­ключение пунктов меню и специальный вид курсора. Пользователь может акти­визировать окна других приложений; когда курсор перемещается в другое окно, он приобретает вид, соответствующий приложению этого окна.

Для обновления экрана используется отдельный поток, что вызвано сле­дующими причинами.

1. В программе PageMaker количество объектов на странице не ограничено, и поэтому обработка запроса на обновление экрана может оказаться весьма длительной.

2. Использование отдельного потока позволяет пользователю в любой момент остановить вывод изображения на экран. При такой методике, например, может немедленно выполняться команда изменения масштаба. Если бы программа должна была сначала закончить вывод страницы в старом масштабе, а затем полностью вывести ее в новом масштабе, это резко увеличи­ло бы время ее отклика.

Возможна также динамическая прокрутка, т.е. обновление экрана при пе­ретаскивании пользователем ползунка прокрутки. Поток обработки событий от­слеживает положение ползунка и перерисовывает размещенные вдоль полей ли­нейки (которые перерисовываются очень быстро, позволяя пользователю сориен­тироваться в текущем положении документа). В это время поток обновления экрана постоянно пытается перерисовать смещающуюся страницу, отслеживая изменение ее положения.

Реализация динамического обновления экрана без использования потоков привела бы к перегрузке приложения, так как ему приходилось бы согласовывать свои действия в разных частях кода с помощью обмена сообщениями. Многопоточность позволяет более естественно реализовать код, в котором предпола­гается параллельное выполнение различных действий.

 



Дата добавления: 2016-06-05; просмотров: 1948;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.