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

ОтсылкаQnx-сообщений

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

Вот в качестве примера ответная реакция, которая извлекает строку из текстового виджета, отсылает её другому процессу, и отображает ответ в том же текстовом виджете:

/* Ответная реакция, отсылающая сообщение другому процессу */

/* Стандартные хеадеры */

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <sys/neutrino.h> /* Требуется для MsgSend() */

/* Инструментальные хеадеры */

#include <Ph.h>

#include <Pt.h>

#include <Ap.h>

/* Локальные хеадеры */

#include "globals.h"

#include "abimport.h"

#include "proto.h"

extern int coid;

int send_msg_to_b( PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo ) {

char *a_message;

/* предотвращает предупреждения (варнинги) об отсутствии ссылок */

widget = widget, apinfo = apinfo, cbinfo = cbinfo;

/* Получает строку из текстового виджета */

PtGetResource (ABW_msg_text, Pt_ARG_TEXT_STRING, 0, 0);

/* Отсылает строку другому процессу */

a_message = (char *)args[0].value;

if ( MsgSend (coid, a_message, msg_size, rcv_msg, msg_size) == -1) {

perror ("Отсылка не удалась ");

PtExit (-1);

}

/* Помните, что UI (пользовательский интерфейс) "висит",

пока другой процесс не ответит! */

/* Отображение ответа в том же текстовом виджете */

PtSetResource (ABW_msg_text, Pt_ARG_TEXT_STRING, rcv_msg, 0);

return( Pt_CONTINUE );

}

Для получения подробной информации см. "Руководство по системной архитектуре QNX 6".

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