Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
          1. Приложение Photon, отправляющее импульсы

Приложение Photon'а, собирающееся отправлять импульсы, должно:

  • Иметь обработчик ввода для сообщений от того приложения, которое собирается получать эти импульсы. Этот обработчик ввода создаётся так, как описано ранее в разделе "Получение сообщений QNX" этой главы. Ему необходимо обрабатывать сообщения, содержащие сообщение импульса, и сообщения, указывающие ему прекратить выдачу импульсов.

Сохраните rcvid из сообщения, которое содержит сообщение импульса – этот идентификатор получателя понадобится Вам при отправке импульса.

  • Отправлять импульсы, вызывая функцию MsgDeliverEvent().

    1. Обработка сигналов

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

Чтобы обойти эту проблему, библиотека Photon'а включает обработчик сигнала. Вы регистрируете функцию обработки сигнала, и Photon вызывает её после того, как

  • Photon'овский обработчик сигнала вернул управление

и

  • завершилась вся обработка текущего виджета.

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

          1. Добавление функции обработки сигналов

Чтобы добавить функцию обработки сигнала, используйте функцию PtAppAddSignalProc(). Обычно Вы будете вызывать её в

  • инициализирующей функции Вашего приложения

или

  • установочной функции для окна.

Вам понадобится подключить хеадер <signal.h>. Синтаксис функции ptAppAddSignalProc() следующий:

int PtAppAddSignalProc( PtAppContext_t app,

sigset_t const *set,

PtSignalProc_t func,

void *data);

где аргументы следующие:

app Адрес контекста приложения, структуры типа PtAppContext_t, управляющей всеми данными, связанными с этим приложением. Задайте NULL в качестве этого аргумента, так чтобы использовался контекст по умолчанию.

set Указатель на набор сигналов, которые должны служить причиной вызова функции обработки сигналов. Для компоновки этого набора используйте функции sigemptyset() и sigaddset(). Более подробно см. в "Справочнике библиотечных функций QNX 6".

func Функция обработки сигналов. См. описание PtSignalProc_t в "Справочнике библиотечных функций Photon'а".

data Любые данные, передаваемые функции

Функция PtAppAddSignalProc() возвращает 0 в случае успеха или –1, если случается ошибка.

Ваша функция обработки сигнала имеет следующий прототип:

int signalProcFunctions(int signum, void *data);

аргументами являются:

signum Номер обрабатываемого сигнала

data Параметр data, заданный в вызове функции PtAppAddSignalProc().

Если Вы хотите, чтобы обработчик сигнала остался установленным, верните Pt_CONTINUE. Чтобы удалить его для текущего сигнала, верните Pt_END (если функция была зарегистрирована и для других сигналов, она по-прежнему будет вызываться, если те появятся).

Соседние файлы в папке Литература_1