Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sp.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
213.38 Кб
Скачать

19. Цикл обработки сообщений. Оконная процедура: назначение, выполнение, способы активизации и завершения.

Типичный цикл обработки сообщений состоит из функций: GetMessage(), TranslateMessage(), и DispatchMessage().

while (GetMessage(&msg, (HWND) NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

Принажатииклавиш Windows посылаетактивномуокнусообщения WM_KEYDOWN и WM_KEYUP. Эти сообщения содержат некоторые виртуальные коды клавиш, а не символы. Для анализа нажатий и порождения сообщений WM_CHAR, которые содержат символьные коды клавиш, используется функция TranslateMessage().

Для того, чтобы направить сообщение на обработку соответствующему окну, используется функция DispatchMessage().

(к чему бы это приспособить?) Приложение может завершить себя посылкой сообщения WM_QUIT. Для этого предназначена функция PostQuitMessage(). Обычно она вызывается в ответ на получение главным окном приложения сообщения WM_DESTROY.

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

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

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

Структура MSG.

20. Многозадачность, многозадачные операционные системы, особенности выполнения приложений в многозадачной среде. Модель многозадачности Win 32

Вычислительный процесс в теории – загруженная в память и готовая к исполнению программа. Процесс (точнее, образ процесса в памяти) состоит из кода и данных, принадлежащих ему. Кроме того, процесс может быть временным владельцем различных системных ресурсов: открытые файлов, каналов (pipes), объектов синхронизации и т.д.

Синонимом термина вычислительный процесс обычно является термин задача. В дальнейшем по возможности будут использоваться именно он, т.к. в контексте Win 32 термин процесс имеет собственное специфическое значения. В свою очередь, задаче синонимично приложение, однако в контексте Win 32 под приложением чаще понимается конкретно оконное приложение (см. раздел окна и сообщения)

В многозадачной среде одновременно может выполняться более одной задачи (вычислительного процесса). Истинное параллельное выполнение задач возможно только на ЭВМ с соответствующей архитектурой – параллельных ЭВМ (см. раздел параллельные вычис­лительные системы). Для ЭВМ обычного (последовательного) типа доступно лишь псевдо­параллельное выполнение задач, обычно реализуемое на основании квантования времени: каждой задаче выделяется определенный промежуток (квант) времени, в течение которого центральный процессор обслуживает именно эту задачу, затем управление пере­дается следу­ющей задаче. Все функции по переключению задач и контролю выполняются планиров­щиком задач, являющимся неотъемлемой частью многозадачной ОС. Решение о моментах и порядке передачи управления принимается на основании дисциплины плани­рования и системы приоритетов, специфичных для каждой конкретной ОС.

Выделяются 2 основных типа многозадачности:

1) истинная или вытесняющая (preemptive) – смена активной задачи производится по инициативе планировщика, независимо от "желания" задачи и, как правило, прозрачно для нее (естественно, выбор ограничивается только готовыми к исполнению задачами, см. состояния процесса);

2) корпоративная или невытесняющая (not-preemptive) – переключение на новую задачу возможно только в моменты, выбираемые текущей задачей.

Вытесняющая многозадачность естественна для Unix, OS/2, Win 32. Примерами ОС с корпоративной многозадачностью могут служить Win 16 и сетевые ОС NovellNetware. Вытесняющая многозадачность обеспечивает большую управляемость прикладных задач, но корпоративная может быть более эффективной.

В Win 32 определены два основных объекта, представляющих выполняющуюся задачу: процесс и поток.

Процесс (process) в терминах Win 32 – динамический объект, ассоциируемый с выполняющейся программой. Каждый процесс имеет свое собственное, изолированное от других процессов, виртуальное адресное пространство в 4 Гбайт, а также собственное пространство описателей объектов, которыми он владеет. Процесс – базовый объект, которому ОС (точнее, системные планировщики ресурсов) распределяют ресурсы.

Поток (thread) – динамический объект, ассоциируемый с последовательностью ("по­током") команд, выполняемой независимо и асинхронно по отношению к другим подоб­ным последовательностям. Поток – базовый объект, которому ОС (точнее, системный плани­ровщик задач) распределяет время центрального процессора.

Каждый процесс имеет как минимум один главный (первичный – primary) поток. Однако главный поток может порождать подчиненные (вторичные) потоки, которые будут выполняться одновременно с ним, равно как и с потоками прочих процессов.

Т.о., процесс в Win 32 является единицей планирования ресурсов, а поток – процессорного времени. Ресурсы процесса доступны (за редким исключением) всем его потокам, и все потоки одного процесса совместно используют его виртуальное адресное пространство, но процессорное время распределяется именно между потоками, а не между процессами. Следовательно, в дальнейшем, когда речь будет идти о диспетчировании, состояниях, синхронизации и т.д. процессовWin 32 (согласно сложившейся терминологии), следует иметь в виду, что все это относится в первую очередь к потокам этих процессов.

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

Помимо потоков, начиная с WindowsNT 3.51 (SP3) и Windows 98, введена еще один объект – т.н. нить (fiber). Нить, подобно потоку, также участвует в распределении процес­сорного времени, но принцип управления ими совершенно иной и напоминает реализацию т.н. корпоративной или невытесняющей многозадачности. Нити функционируют в рамках потоков, следовательно, потоки и нити не являются альтернативными механизмами.

В Windows 2000 была введена еще одна единица планирования вычислительных процессов – т.н. задание (JobObject), объединяющее несколько логически связанных и взаимодействующих задач. Более подробно задания в рамках настоящего курса пока не рассматриваются.

Примечание. В ранней русскоязычной литературе по Win 32 термин "thread" мог переводиться и как "поток", и как "нить", т.е. "поток" и "нить" считались синонимами. В связи с реальным появлением объекта "fiber", обладающего собственным набором свойств, подобная синонимичность стала некорректной. Применительно к OS/2 для того же термина употреблялся перевод "шаг".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]