Поделиться через


Класс target_block

Класс target_block — это абстрактный базовый класс, который предоставляет основные функции управления соединениями и проверку ошибок только для целевых блоков.

Синтаксис

template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;

Параметры

_SourceLinkRegistry
Реестр ссылок, используемый для хранения исходных ссылок.

_MessageProcessorType
Тип процессора для обработки сообщений.

Участники

Общедоступные typedefы

Имя Описание
source_iterator Тип итератора для source_link_manager этого target_block объекта.

Открытые конструкторы

Имя Описание
target_block Формирует объект target_block.
Деструктор для ~target_block Уничтожает target_block объект.

Открытые методы

Имя Описание
распространять Асинхронно передает сообщение из исходного блока в этот целевой блок.
send Синхронно передает сообщение из исходного блока в этот целевой блок.

Защищенные методы

Имя Описание
async_send Асинхронно отправляет сообщение для обработки.
отклонить_входящие_сообщения Указывает блоку, что новые сообщения должны быть отклонены.
включить_пакетную_обработку Активирует пакетную обработку для этого блока.
initialize_target Инициализирует базовый объект. В частности, message_processor объект необходимо инициализировать.
link_source Связывает указанный блок источника с этим target_block объектом.
process_input_messages Обрабатывает сообщения, полученные как входные данные.
process_message При переопределении в производном классе обрабатывает сообщение, которое ранее было принято данным объектом target_block.
propagate_message При переопределении в производном классе этот метод асинхронно передает сообщение из этого ISource блока этому target_block объекту. Вызывается методом propagate при вызове исходного блока.
register_filter Регистрирует метод фильтра, который будет вызываться для каждого полученного сообщения.
удалить_источники Отменяет связь со всеми источниками после ожидания выполнения невыполненных асинхронных операций отправки.
send_message При переопределении в производном классе этот метод синхронно передает сообщение из ISource блока этому target_block объекту. Вызывается методом send при вызове исходного блока.
sync_send Синхронно отправляет сообщение для обработки.
unlink_source Разрывает связь указанного блока источника с этим объектом target_block.
unlink_sources Отменяет связь всех исходных блоков этого target_block объекта. (Переопределяет ITarget::unlink_sources.)
wait_for_async_sends (ожидание_асинхронных_отправок) Ожидает завершения всех асинхронных распространений.

Иерархия наследования

ITarget

target_block

Требования

Заголовок: agents.h

Пространство имен: конкурентность

асинхронная_отправка

Асинхронно отправляет сообщение для обработки.

void async_send(_Inout_opt_ message<_Source_type>* _PMessage);

Параметры

_PMessage
Указатель на отправленное сообщение.

отклонять_входящие_сообщения

Указывает блоку, что новые сообщения должны быть отклонены.

void decline_incoming_messages();

Замечания

Этот метод вызывается деструктором, чтобы обеспечить отклонение новых сообщений во время процесса уничтожения.

включить_пакетную_обработку (enable_batched_processing)

Активирует пакетную обработку для этого блока.

void enable_batched_processing();

initialize_target

Инициализирует базовый объект. В частности, message_processor объект необходимо инициализировать.

void initialize_target(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

Параметры

_PScheduler
Планировщик, используемый для планирования задач.

_PScheduleGroup
Группа расписаний, используемая для задач планирования.

Связывает указанный блок источника с этим target_block объектом.

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

Параметры

_PSource
Указатель на блок ISource, который должен быть связан.

Замечания

Эта функция не должна вызываться непосредственно в объекте target_block . Блоки должны быть соединены вместе с помощью link_target метода в ISource блоках, который вызовет link_source метод в соответствующем целевом объекте.

обработка_входящих_сообщений

Обрабатывает сообщения, полученные как входные данные.

virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);

Параметры

_PMessage
Указатель на сообщение, которое необходимо обработать.

обработать_сообщение

При переопределении в производном классе обрабатывает сообщение, которое ранее было принято данным объектом target_block.

virtual void process_message(message<_Source_type> *);

распространять

Асинхронно передает сообщение из исходного блока в этот целевой блок.

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.

Замечания

Метод выбрасывает исключение invalid_argument, если либо параметр _PMessage, либо _PSource имеет значение NULL.

передать_сообщение

При переопределении в производном классе этот метод асинхронно передает сообщение из этого ISource блока этому target_block объекту. Вызывается методом propagate при вызове исходного блока.

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.

register_filter

Регистрирует метод фильтра, который будет вызываться для каждого полученного сообщения.

void register_filter(filter_method const& _Filter);

Параметры

_Фильтр
Метод фильтра.

удалить_источники

Отменяет связь со всеми источниками после ожидания выполнения невыполненных асинхронных операций отправки.

void remove_sources();

Замечания

Все целевые блоки должны вызывать эту процедуру для удаления источников в своем деструкторе.

отправить

Синхронно передает сообщение из исходного блока в этот целевой блок.

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.

Замечания

Метод выбрасывает исключение invalid_argument, если либо параметр _PMessage, либо _PSource имеет значение NULL.

Использование метода send вне инициации сообщений и для распространения сообщений в сети опасно и может привести к взаимоблокировке.

При возврате send, сообщение либо было принято и передано в целевой блок, либо отклонено целевым блоком.

отправить_сообщение

При переопределении в производном классе этот метод синхронно передает сообщение из ISource блока этому target_block объекту. Вызывается методом send при вызове исходного блока.

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

Возвращаемое значение

Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.

Замечания

По умолчанию этот блок возвращает declined, если его не переопределит производный класс.

синхронная_отправка

Синхронно отправляет сообщение для обработки.

void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);

Параметры

_PMessage
Указатель на отправленное сообщение.

target_block

Формирует объект target_block.

target_block();

~target_block

Уничтожает target_block объект.

virtual ~target_block();

Разрывает связь указанного блока источника с этим объектом target_block.

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

Параметры

_PSource
Указатель на ISource блок, который должен быть развязан.

Отменяет связь всех исходных блоков этого target_block объекта.

virtual void unlink_sources();

wait_for_async_sends

Ожидает завершения всех асинхронных распространений.

void wait_for_async_sends();

Замечания

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

См. также

Пространство имен параллелизм
Класс ITarget