Сообщения
В мультизадачной среде, которой является операционная система IBM OS/2 Warp, одновременно могут происходить многие события. Приложения могут работать параллельно и независимо, что в целом повышает производительность системы. Однако возможность мультизадачной обработки накладывает определенные требования на приемы работы с такими устройствами, как мышь и клавиатура.
Программа, запущенная под управлением операционной системы MS-DOS , может монопольно использовать мышь и клавиатуру, так как она работает в одиночестве. Весьма распространенный способ ввода с клавиатуры в программах MS-DOS заключается в том, что программа вызывает функцию getch (или аналогичную), останавливающую работу программы до тех пор, пока пользователь не нажмет какую-нибудь клавишу. После ввода программа продолжает свое выполнение.
Очевидно, что в мультизадачной среде такой способ ввода применять нельзя, так как одновременно могут работать несколько приложений и каждому из них может потребоваться ввести что-нибудь с клавиатуры. Вопрос - какое приложение должно выполнять ожидание в данном случае?
Аналогичная трудность возникает и при работе с мышью. Пользователь может перемещать курсор мыши внутри окон, созданных разными приложениями. Более того, пользователь может начинать ту или иную операцию, выполняемую с помощью мыши, в окне одного приложения, а заканчивать - в окне другого приложения.
Например, пусть мы запустили два приложения. Можно установить курсор мыши в окно первого приложения, нажать левую клавишу мыши, затем, не отпуская клавишу, переместить курсор мыши в окно второго приложения и там отпустить клавишу мыши. При этом в окне первого приложения произошло одно событие (пользователь нажал левую клавишу мыши), а в окне второго - другое (пользователь отпустил клавишу мыши). Очевидно, что использование традиционных для MS-DOS способов работы с мышью в среде Presentation Manager (если бы такое было возможно) может привести к большим проблемам при попытке приложений определить, что же все-таки пользователь сделал с курсором и клавишами мыши.
Для того чтобы процедура создания приложений Presentation Manager не стала безумно сложной, был предусмотрен простой механизм передачи сообщений с использованием очередей.
Под сообщением понимается некоторая структура данных, несущая исчерпывающую информацию о том или ином событии. Например, щелчок клавишей мыши приводит к созданию сообщения, в котором, в частности, записаны координаты курсора мыши на момент возникновения такого события. Каждое сообщение имеет код, который можно использовать для идентификации события.
В процессе инициализации приложение Presentation Manager создает очередь, предназначенную для хранения сообщений, имеющих отношение к данному приложению. Поэтому если пользователь нажмет клавишу мыши, когда курсор будет указывать на окно первого приложения, в очередь первого приложения будет записано сообщение об этом событии. После того как пользователь, не отпуская клавишу мыши, переместит курсор мыши в область окна второго приложения и там отпустит клавишу, в очередь второго приложения будет записано соответствующее сообщение (о том, что пользователь отпустил клавишу).
Разумеется, сообщения могут возникать не только от мыши и клавиатуры. Они могут создаваться таймером , драйверами различных периферийных устройств, а также другими приложениями и системой Presentation Manager.