Класс propagator_block
Класс propagator_block
— это абстрактный базовый класс для блоков сообщений, которые являются одновременно блоками источников и целевыми блоками. Он объединяет функциональные возможности обоих классов, source_block
и target_block
.
Синтаксис
template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class propagator_block : public source_block<_TargetLinkRegistry,
_MessageProcessorType>,
public ITarget<typename _SourceLinkRegistry::type::source_type>;
Параметры
_TargetLinkRegistry
Реестр ссылок, используемый для хранения целевых ссылок.
_SourceLinkRegistry
Реестр ссылок, используемый для хранения исходных ссылок.
_MessageProcessorType
Тип процессора для обработки сообщений.
Участники
Общедоступные определения типов
Имя | Описание |
---|---|
source_iterator |
Тип итератора для source_link_manager этого propagator_block . |
Открытые конструкторы
Имя | Описание |
---|---|
propagator_block | Формирует объект propagator_block . |
Деструктор ~propagator_block | Уничтожает объект propagator_block . |
Открытые методы
Имя | Описание |
---|---|
распространять | Асинхронно передает сообщение из исходного блока в этот целевой блок. |
send | Синхронно инициирует сообщение в этом блоке. Вызывается блоком ISource . После завершения этой функции сообщение уже будет распространяться в блок. |
Защищенные методы
Имя | Описание |
---|---|
decline_incoming_messages | Указывает на блок, который должны быть отклонены новые сообщения. |
initialize_source_and_target | Инициализирует базовый объект. В частности, message_processor объект необходимо инициализировать. |
link_source | Связывает указанный блок источника с этим propagator_block объектом. |
process_input_messages | Обработка входных сообщений. Это полезно только для блоков распространения, производных от source_block (переопределения source_block::p rocess_input_messages.) |
propagate_message | При переопределении в производном классе этот метод асинхронно передает сообщение из блока этому propagator_block объектуISource . Вызывается методом propagate при вызове исходного блока. |
register_filter | Регистрирует метод фильтра, который будет вызываться при каждом полученном сообщении. |
remove_network_links | Удаляет все исходные и целевые сетевые ссылки из этого propagator_block объекта. |
send_message | При переопределении в производном классе этот метод синхронно передает сообщение из ISource блока этому propagator_block объекту. Вызывается методом send при вызове исходного блока. |
unlink_source | Отменяет связь с указанным блоком источника из этого propagator_block объекта. |
unlink_sources | Отменяет связь всех блоков источника из этого propagator_block объекта. (Переопределения ITarget::unlink_sources.) |
Замечания
Чтобы избежать нескольких наследование, propagator_block
класс наследует от source_block
класса и ITarget
абстрактного класса. Большая часть функций класса target_block
реплицируется здесь.
Иерархия наследования
propagator_block
Требования
Заголовок: agents.h
Пространство имен: concurrency
decline_incoming_messages
Указывает на блок, который должны быть отклонены новые сообщения.
void decline_incoming_messages();
Замечания
Этот метод вызывается деструктором, чтобы обеспечить отклонение новых сообщений во время уничтожения.
initialize_source_and_target
Инициализирует базовый объект. В частности, message_processor
объект необходимо инициализировать.
void initialize_source_and_target(
_Inout_opt_ Scheduler* _PScheduler = NULL,
_Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);
Параметры
_PScheduler
Планировщик, используемый для планирования задач.
_PScheduleGroup
Группа расписаний, используемая для задач планирования.
link_source
Связывает указанный блок источника с этим propagator_block
объектом.
virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);
Параметры
_PSource
Указатель на блок, связанный ISource
.
process_input_messages
Обработка входных сообщений. Подходит только для блоков распространения, производных от source_block.
virtual void process_input_messages(_Inout_ message<_Target_type>* _PMessage);
Параметры
_PMessage
Указатель на сообщение, которое необходимо обработать.
распространять
Асинхронно передает сообщение из исходного блока в этот целевой блок.
virtual message_status propagate(
_Inout_opt_ message<_Source_type>* _PMessage,
_Inout_opt_ ISource<_Source_type>* _PSource);
Параметры
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
Замечания
Метод propagate
вызывается в целевом блоке связанным исходным блоком. Он помещает в очередь асинхронную задачу для обработки сообщения, если он еще не включен в очередь или выполняется.
Метод создает исключение invalid_argument, если _PMessage
имеет значение NULL
или _PSource
параметр.
propagate_message
При переопределении в производном классе этот метод асинхронно передает сообщение из блока этому propagator_block
объектуISource
. Вызывается методом propagate
при вызове исходного блока.
virtual message_status propagate_message(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource) = 0;
Параметры
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
propagator_block
Формирует объект propagator_block
.
propagator_block();
~propagator_block
Уничтожает объект propagator_block
.
virtual ~propagator_block();
register_filter
Регистрирует метод фильтра, который будет вызываться при каждом полученном сообщении.
void register_filter(filter_method const& _Filter);
Параметры
_Фильтр
Метод фильтра.
remove_network_links
Удаляет все исходные и целевые сетевые ссылки из этого propagator_block
объекта.
void remove_network_links();
отправить
Синхронно инициирует сообщение в этом блоке. Вызывается блоком ISource
. После завершения этой функции сообщение уже будет распространяться в блок.
virtual message_status send(
_Inout_ message<_Source_type>* _PMessage,
_Inout_ ISource<_Source_type>* _PSource);
Параметры
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
Замечания
Этот метод создает исключение invalid_argument, если задано NULL
_PMessage
значение или _PSource
параметр.
send_message
При переопределении в производном классе этот метод синхронно передает сообщение из ISource
блока этому propagator_block
объекту. Вызывается методом send
при вызове исходного блока.
virtual message_status send_message(
_Inout_ message<_Source_type> *,
_Inout_ ISource<_Source_type> *);
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
Замечания
По умолчанию этот блок возвращается, если не переопределяется declined
производным классом.
unlink_source
Отменяет связь с указанным блоком источника из этого propagator_block
объекта.
virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);
Параметры
_PSource
Указатель на ISource
блок, который должен быть отключен.
unlink_sources
Отменяет связь всех блоков источника из этого propagator_block
объекта.
virtual void unlink_sources();
См. также
Пространство имен concurrency
Класс source_block
Класс ITarget