SObjectizer
5.1
|
Механизм слоев SObjectizer. so_5: Версия 5.0.0.
5-ое поколение предполагает развертывание SObjectizer-а не как набора глобальных объектов и свободных функций, а как ядра SObjectizer Environment. Поэтому функциональность SObjectizer-а нельзя расширять путем простого добавления ряда глобальных объектов и свободных функций. Для решения задачи расширения стандартных возможностей SObjectizer в него введен механизм слоев. Слой – это объект, который внедряется в SObjectizer Environment и может доступен из него. Все методы работы со слоями синхронизируются, но о синхронизации обращений к методам слоя должен заботиться прикладной программист.
Слой SObjectizer должен реализовывать интерфейс so_layer_t. Для этого необходимо перегрузить следующие методы: so_layer_t::start(), so_layer_t::shutdown(), so_layer_t::wait().
Метод служит для инициализации слоя. Реализация в базовом классе ничего не делает. Если для работы слоя необходимо выполнить какие-либо действия для инициализации слоя, то необходимо переопределить so_layer_t::start().
Завершение работы слоя предусматривает две фазы:
При завершении работы SObjectizer завршеют работу и все добавленные в него слои. Если слои используют дополнительные нити или используют асинхронные операции, то может оказаться, что завершение такого слоя займет продолжительное время. Если разделить уведомление о завершении работы и непосредственно ожиание завершения работы, то можно сначала уведомить все слои, что необходимо завершать работу, а потом только ожидать завершения, что позволит всем слоям завершаться одновременно.
Метод служит для инициализации завершения работы слоя. Реализация в базовом классе ничего не делает. В тех случаях, когда завршение слоя связано с выполнением ряда действия, то следует переопредялять so_layer_t::shutdown().
Метод служит для ожидания завершения слоя. Реализация в базовом классе ничего не делает.
В SObjectizer слой можно добавить 2-мя способами. В зависимости от способа добавления слои можно разделить на 2 типа:
Независимо от способа добавлени слоя, любой слой при передаче в SObjectizer Environment будет сначала привязан к so_environment_t, а только затем будет вызван so_layer_t::start(). Это позволит обращаться к SObjectizer Environment из внутрениих методов слоя при помощи so_layer_t::so_environment().
Слои по умолчанию, добавляются в момент инициализации so_environment_t. Передача слоев происходит при помощи so_environment_params_t.
Дополнительные слои добавляются во время работы SObjectizer Environment при помощи so_environment_t::add_extra_layer(). Если слой успешно запущен, то он становится слоем SObjectizer и с ним можно Работа со слоем работать.
Доступ к слою осуществляется при помощи шаблонного метода so_environment_t::query_layer():
Параметр SO_LAYER указывает на тип шаблона. В зависимости от параметра throwing_strategy при отсутствии заданного слоя в составе SObjectizer будет выбрашено исключение или возвращен нулевой указатель.
Пример использования слоев sample/so_5/layer/main.cpp
Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:21. Создано системой 1.8.3.1 |