Программирование >>  Процедурные приложения 

1 ... 83 84 85 [ 86 ] 87 88 89 ... 150


В Windows данные от устройств ввода поступают в виде сообщений. В каждом сообщении указывается системное время, состояние клавиатуры, код нажатой клавиши, позиция указателя мыши и состояние кнопок мыши, а также идентификатор устройства, пославшего сообщение.

Все сообщения от клавиатуры, мыши и системного таймера имеют одинаковый формат и обрабатываются схожим образом. В случае сообщений клавиатуры передается виртуальный код нажатой клавиши, который идентифицирует клавишу независимо от имеющейся в наличии клавиатуры и генерируется Windows, а также аппаратно-зависимый скан-код, генерируемый самой клавиатурой. Передается также информация о состоянии ряда других клавиш, таких как [NumLock], [Alt], [Shift] и [Ctrl].

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

Другую группу составляют сообщения системного таймера. Формат их такой же, как у сообщений клавиатуры и мыши. Windows позволяет приложениям инициализировать таймер таким образом, чтобы одно из окон приложения регулярно принимало сообщения от таймера. Такие сообщения поступают непосредственно в очередь данного приложения.

Сообщения

В основе Windows лежит механизм генерации и обработки сообщений. С точки зрения приложений, сообщения являются формой уведомления о произошедших событиях, на которые приложение должно (или не должно) каким-то образом реагировать. Пользователь может инициировать событие щелчком или перемещением указателя мыши, изменением размера окна или выбором команды из меню. Другие события могут быть инициализированы самим приложением. Например, в электронной таблице завершение вычислений в ячейках может сопровождаться автоматическим обновлением диаграммы, основанной на данном блоке ячеек. В таком случае при завершении вычислений генерируется сообщение для этого же приложения о необходимости обновления диаграммы.

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

Рассматривая роль сообщений в Windows, необходимо отметить, что именно благодаря подсистеме сообщений становится возможной многозадачность Windows. Подсистема сообщений позволяет ей распределять время работы процессора между всеми открытыми приложениями. Каждый раз, когда Windows посылает сообщение приложению, она на некоторое время открывает этому приложению доступ к процессору. Единственная возможность для приложения получить доступ к процессору - это получить сообщение от Windows. Кроме того, сообщения позволяют приложению прореагировать определенным образом на событие, произошедшее в системе. Это событие могло быть вызвано самим приложением, другим приложением, выполняющимся в это же время в Windows, пользователем или операционной системой. Каждый раз, когда происходит то или иное событие, Windows оповещает о нем все заинтересованные приложения, открытые в настоящий момент.

Управление памятью

Одним из наиболее Важных ресурсов системы является память компьютера. Если в системе одновременно запущено несколько приложений, то они должны иметь возможность координировать свою работу таким образом, чтобы не вызывать конфликтов при распределении системных ресурсов. Так, в результате многократного открытия и закрытия программ память компьютера может оказаться фрагментированной. Windows обладает встроенной подсистемой дефрагментации памяти, организующей перемещение и объединение блоков памяти.

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



Приложения Windows могут совместно использовать функции, хранящиеся в отдельных исполняемых файлах общего доступа. Такие файлы называются библиотеками динамической компоновки (DLL - dynamic link libraries). Windows содержит встроенный механизм компоновки таких библиотек с программами на этапе выполнения. Для работы самой Windows необходим достаточно большой набор DLL-файлов. С целью упрощения работы с динамическими библиотеками в Windows применяется новый формат исполняемых файлов. Такие файлы содержат информацию, позволяющую системе управлять блоками кода и данных, а также выполнять динамическую компоновку.

Аппаратная независимость

Windows обеспечивает также независимость пользовательской среды от типа используемых аппаратных устройств. Благодаря этому программисты избавляются от необходимости наперед учитывать, какие именно монитор, принтер или устройство вода будут подключены к конкретному компьютеру. Ранее, при написании приложений для MS-DOS, необходимо было снабжать программы драйверами всех устройств, которые могут повстречаться программе на разных компьютерах. Например, дня того чтобы приложение MS-DOS могло выводить данные на принтеры любого типа, программист должен был позаботиться о том, чтобы программа содержала драйверы принтеров всех известных марок и типов. Поэтому при написании программы уйма времени уходила на переписывание практически одинаковых программ драйверов. Скажем, один вариант драйвера принтера LaserJet предназначался для приложения MicrosoftWord for DOS, другой вариант этого же драйвера - для MicrosoftWorks и

т.д.

В среде Windows драйверы для определенного устройства создаются и инсталлируются только один раз. Причем они могут устанавливаться сразу при инсталляции Windows, поступать вместе с программными продуктами или добавляться самим пользователем.

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

Аппаратная независимость достигается также за счет определения минимального набора базовых операций, которые должны выполняться любыми устройствами. Этот минимальный набор включает элементарные операции, необходимые для правильного решения любых задач, которые могут быть поставлены перед данным устройством. Какой бы сложности ни была задача, она может быть сведена к последовательности элементарных операций, входящих в набор минимальных требований к устройству. Например, далеко не все графопостроители обладают функцией рисования окружностей. Тем не менее, даже если выведение окружностей не входит в набор функций графопостроителя, вы все равно можете создавать программы, которые могут ставить перед графопостроителем подобную задачу. И поскольку, в соответствии с минимальными требованиями, все графопостроители, инсталлируемые в Windows, должны уметь рисовать линии, Windows автоматически преобразует окружность в набор линий и передаст массив векторов графопостроителю.

Чтобы избежать конфликтов при вводе данных, в Windows также определен минимальный набор кодов клавиш, которые должны распознаваться любым приложением. Стандартный набор кодов в целом соответствует раскладке ПК-совместимой клавиатуры. Если какая-нибудь фирма выпустит клавиатуру с дополнительными клавишами, не входящими в стандартный набор, то она должна позаботиться о специальном программном обеспечении, преобразующем коды этих клавиш в последовательности стандартных кодов, распознаваемых Windows. Минимальному набору кодов должны соответствовать команды, поступающие не только от клавиатуры, но и от всех других устройств ввода, в том числе от мыши. Таким образом, если какая-нибудь фирма выпустит четырехкнопочную мышь, то это не должно вас беспокоить, поскольку производитель сам позаботится о том, чтобы команды от дополнительных кнопок соответствовали стандартным кодам Windows.

Библиотеки динамической компоновки

Функциональные возможности Windows в большой мере обеспечиваются за счет использования библиотек динамической компоновки (DLL). В частности, благодаря этим библиотекам к ядру операционной системы добавляется графический пользовательский



интерфейс. DLL-файлы содержат функции, которые подключаются к программе во время ее выполнения (динамически), а не во время компиляции (статически).

Динамическая компоновка программ с внешними файлами, содержащими часто используемые процедуры, не является чем-то уникальным для Windows. Этот принцип широко применяется в языках C/C++, где все стандартные функции предоставляются внешними библиотеками. Компоновщик автоматически копирует из библиотек и вставляет в исполняемый файл такие функции, как getchar () и printf (). Благодаря использованию подобного подхода программист избавляется от необходимости переписывать каждый раз базовые функции, чем достигается стандартность выполнения таких операций, как считывание символов, вводимых с клавиатуры, и форматирование данных, выводимых на печать. Программист легко может создать собственную библиотеку часто задействуемых функций, например функций изменения шрифта и выравнивания текста. Предоставление доступа к функциям и методам как к глобальным инструментам среды программирования обеспечивает возможность повторного использования кода - ключевая концепция объектно-ориентированного программирования.

Все библиотеки Windows компонуются динамически. То есть функции из этих библиотек не копируются в исполняемые файлы, а вызываются во время выполнения программы, что позволяет экономить ресурсы памяти. Не важно, сколько приложений одновременно запущено, - в ОЗУ хранится только одна копия библиотеки, используемая всеми приложениями.

Если в программе вызывается стандартная функция Windows, то компилятор должен сгенерировать по месту вызова машинный код, содержащий обращение по адресу, находящемуся в другом сегменте кода. Такое положение представляет собой определенную проблему, поскольку до тех пор, пока программа не будет запущена, невозможно угадать, каким будет адрес библиотечной функции. Решение этой проблемы в Windows называется отложенным связыванием, или динамической компоновкой. Начиная с Windows 3.0 и Microsoft С 6.0, компоновщик позволяет обращаться к функциям, адреса которых не известны в момент компоновки. Окончательная компоновка функции происходит лишь после того, как программа запускается и загружается в память.

В компиляторах C/C++ используются специальные импортируемые библиотеки, назначение которых состоит в подготовке приложений к динамической компоновке в среде Windows. Например, в библиотеке USER32.LIB перечислены все стандартные функции Windows, к которым можно обращаться в программах. В записях этой библиотеки определяются модули Windows, где хранятся соответствующие функции, а также, в большинстве случаев, порядковый номер функции в этом модуле.

Например, многие приложения Windows вызывают функцию PostMessage (). Во время компиляции программы компоновщик получает из файла USER32.LIB информацию о модуле и номере функции PostMessage() и встраивает эти данные в код программы. При запуске программы Windows считывает имеющуюся информацию и связывает программу с реальным кодом функции PostMessage ().

Формат исполняемых файлов

Для Windows был разработан новый формат исполняемых файлов. В частности, изменения коснулись заголовка файла, который теперь может содержать информацию об импортируемых функциях библиотек динамической компоновки. Чаще всего используются функции модулей KERNEL, USER и GDI, содержащих множество подпрограмм, связанных с различными рутинными операциями, в том числе с обработкой сообщений. Функции, хранящиеся в DLL-модулях, еще называют экспортируемыми. В соответствии с новым форматом исполняемых файлов, экспортируемые функции определяются по имени модуля и порядковому номеру функции в нем. Все DLL-файлы содержат таблицу точек входа, в которой перечислены адреса всех экспортируемых функций,

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

Другая особенность нового формата исполняемых файлов состоит в том, что с каждым сегментом кода и данных любого приложения и библиотеки связывается дополнительная информация. Обычно сегменты кода помечаются специальными флагами как перемещаемые и выгружаемые, а сегменты данных - как перемещаемые. В соответствии с установленными



1 ... 83 84 85 [ 86 ] 87 88 89 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика