Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Класс 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