logo
Литература_1 / photon_old

ИмпульсыPhoton'а

[Прим. пер. Импульсы Photon'а – это отнюдь не импульсы QNX 6, а прокси QNX 4. Именно этот механизм.]

В дополнении к синхронному обмену сообщений, Photon поддерживает импульсы. Процесс, желающий уведомить другой процесс, но не желающий при этом ожидать ответа, может использовать импульсы Photon'а. Например, сервер может использовать импульс, чтобы общаться с клиентом в ситуации, когда отсылка сообщения может оставить их обоих SEND-блокированными (и поэтому попавшими в тупик). Импульс Photon'а определяется по его отрицательному идентификатору процесса, который может быть использован в качестве аргумента pid функции PtAppAddInput(). Этот идентификатор процесса является локальным для Вашего приложения. Если Вы хотите, чтобы другой процесс прислал Вам импульс, Вы должны "взвести" импульс, используя функцию PtPulseArm(). Это создаёт объект типа PtPulseMsg_t, который может быть послан другому процессу в сообщении. Другой процесс затем будет способен посылать импульсы, вызывая функцию MsgDeliverEvent().

 В OC QNX версии 6 тип PtPulseMsg_t является структурой sigevent. Биты в msg.sigev_value.sival_int, которые соответствуют _NOTIFY_COND_MASK, сброшены, но могут быть установлены приложением, отсылающим импульс. Более подробно см. в описании функции ionotify() "Справочника библиотечных функций QNX 6".

PtPulseArm() (описанная в "Справочнике библиотечных функций Photon'а ") просто берёт структуру sigevent. Функции PtPulseArmFd() и PtPulseArmPid() существуют для совместимости с более ранними версиями OC QNX и Photon microGUI.

Давайте посмотрим код, который Вам надо написать, чтобы поддерживать импульс в:

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4