Создание очереди сообщений
После регистрации в системе Presentation Manager приложение должно создать очередь сообщений. Для этого необходимо воспользоваться функцией WinCreateMsgQueue . Соответствующий фрагмент кода показан ниже.
#define INCL_WIN #include <os2.h> int main () { HMQ hmq; HAB hab;
hab = WinInitialize (0); hmq = WinCreateMsgQueue (hab, 0); if(hmq == NULLHANDLE) { WinTerminate (hab); return(-1); } . . . // Строки исходного текста приложения . . . WinDestroyMsgQueue (hmq); WinTerminate (hab); return(0); }
Прототип функции WinCreateMsgQueue представлен ниже:
HMQ WinCreateMsgQueue (HAB hab, LONG lQueuesize);
Через первый параметр этой функции необходимо передать идентификатор Anchor-block , полученный при регистрации от функции WinInitialize . Второй параметр определяет размер очереди сообщений, причем если указано нулевое значение, используется размер, принятый по умолчанию (10 сообщений).
В случае успеха функция возвращает идентификатор созданной очереди сообщений, который имеет тип HMQ , а при ошибке - значение NULLHANDLE.
Обратите внимание, что если нам не удалось создать очередь сообщений, то перед аварийным завершением работы приложение дожно вызвать функцию WinTerminate .
Для уничтожения очереди сообщений следует использовать функцию WinDestroyMsgQueue , передав ей в качестве параметра идентификатор уничтожаемой очереди. В случае успеха функция возвращает значение TRUE, при ошибке - FALSE.
Если приложение создает несколько задач, оно может также создать для каждой задачи свою очередь сообщений. В этом случае перед завершением работы приложения необходимо уничтожить функцией WinDestroyMsgQueue все созданные очереди сообщений.