Пользовательский интерфейс и серверная часть с ведением журнала Pantheios

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

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

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


person JamieH    schedule 01.10.2009    source источник


Ответы (1)


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

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

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

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

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

ХТН

person dcw    schedule 02.10.2009