Класс source_block

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

template<
   class _TargetLinkRegistry,
   class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>
>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;

Параметры

  • _TargetLinkRegistry
    Реестр ссылок для использования для хранения целевых ссылок.

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

Члены

Открытые определения типов

Имя

Описание

target_iterator

Итератор для прохода подключенных целевых объектов.

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

Имя

Описание

Конструктор source_block::source_block

Создает объект source_block.

Деструктор source_block::~source_block

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

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

Имя

Описание

Метод source_block::accept

Принимает сообщение, предложенное этим объектом source_block, передавая владение вызывающему объекту.

Метод source_block::acquire_ref

Получает значение счетчика ссылок на этот объект source_block, чтобы предотвратить удаление.

Метод source_block::consume

Потребляет сообщение, ранее предложенное данным объектом source_block и успешно зарезервированное целевым объектом, передавая владение вызывающему объекту.

Метод source_block::link_target

Связывает целевой блок с этим объектом source_block.

Метод source_block::release

Освобождает предыдущее успешное резервирование сообщения.

Метод source_block::release_ref

Освобождает значение счетчика ссылок на этот объект source_block.

Метод source_block::reserve

Резервирует сообщение, которое было ранее предложено этим объектом source_block.

Метод source_block::unlink_target

Удаляет связь целевого блока с этим объектом source_block.

Метод source_block::unlink_targets

Удаляет связи всех целевых блоков с этим объектом source_block. (Переопределяет ISource::unlink_targets.)

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

Имя

Описание

Метод source_block::accept_message

При переопределении в производном классе, принимает сообщение, предложенное источником. Сообщений блоки должны переопределять этот метод для проверки _MsgId и возврата сообщения.

Метод source_block::async_send

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

Метод source_block::consume_message

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

Метод source_block::initialize_source

Инициализирует message_propagator внутри этого source_block.

Метод source_block::link_target_notification

Обратный вызов, который уведомляет, что новая цель связана с этим объектом source_block.

Метод source_block::propagate_to_any_targets

При переопределении в производном классе распространяет данное сообщения для любой или всех связанных целевые объекты. Это основной способ распространения для блоков сообщений.

Метод source_block::release_message

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

Метод source_block::remove_targets

Удаляет все целевые ссылки для этого исходного блока. Должен быть вызван из деструктора.

Метод source_block::reserve_message

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

Метод source_block::resume_propagation

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

Метод source_block::sync_send

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

Метод source_block::unlink_target_notification

Обратный вызов, который уведомляет, что цель отделена от этого объекта source_block.

Метод source_block::wait_for_outstanding_async_sends

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

Заметки

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

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

ISource

source_block

Требования

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

Пространство имен: Concurrency

См. также

Ссылки

Пространство имен Concurrency

Класс ISource