Пользовательский интерфейс и задний план с регистрацией Pantheios - PullRequest
4 голосов
/ 02 октября 2009

Извиняюсь, если мне не хватает чего-то действительно очевидного, но я пытаюсь понять, как написать пользовательский внешний интерфейс и внутренний конец с Pantheios, (Я использую это из C ++, а не C.)

Я могу следовать целям функций инициализации (я думаю), но я не уверен насчет остальных: pantheios_be_logEntry, pantheios_fe_getProcessIdentity и pantheios_fe_isSeverityLogged.

В частности, я запутался в связи между внешним и внутренним интерфейсом. Как мне заставить их общаться друг с другом?

1 Ответ

3 голосов
/ 03 октября 2009

Не уверен, что я точно понимаю, что вы не понимаете, но, возможно, это часть проблемы. ;-) Так что я буду стараться изо всех сил, и вы дадите мне знать, рядом он или нет.

pantheios_fe_getProcessIdentity() вызывается один раз, когда Pantheios инициализируется. Вам необходимо вернуть строку, которая идентифицирует процесс. (На самом деле, он идентифицирует блок ссылок; термин, определенный в Imperfect C ++ , написанный создателем Pantheios Мэтью Уилсоном, что означает область имен ссылок, то есть исполняемый программный модуль или модуль динамической библиотеки .)

pantheios_fe_isSeverityLogged() вызывается всякий раз, когда в коде приложения выполняется инструкция журнала. Он возвращает ненулевое значение, чтобы указать, что оператор должен быть обработан и отправлен на выход (через серверную часть). Если он возвращает ноль, никакой обработки не происходит. Кстати, это главная причина, почему Пантеос так быстр .

pantheios_be_logEntry() вызывается всякий раз, когда оператор журнала должен быть отправлен для вывода, когда pantheios_fe_isSeverityLogged() вернул ненулевое значение и ядро ​​ Pantheios обработало оператор (сформировав все аргументы в вашем коде в одну строку). Он отправляет строку оператора туда, куда он должен идти. Например, серверная часть be.fprintf выводит ее на консоль, используя fprint().

Как только вы поймете эти аспекты, вторая часть вашего вопроса - это то, где это становится интересным. Когда ваш интерфейс и серверная часть инициализируются, они создают некоторый контекст (например, объект C ++), который ядро ​​Pantheios хранит для них, и возвращают их каждый раз, когда он вызывает функцию API интерфейсного интерфейса. Когда вы настраиваете оба, вы можете заставить их общаться через некоторый общий контекст, о котором они оба знают, но о котором ядро ​​Pantheios не знает (и не должно знать), за исключением наличия непрозрачного дескриптора (void*) к нему.

НТН

...