Класс join
Блок обмена сообщениями join
— это упорядоченный блок propagator_block
с несколькими источниками и одной целью, который объединяет сообщения типа T
от каждого из своих источников.
Синтаксис
template<class T,
join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
multi_link_registry<ISource<T>>>;
Параметры
T
Тип полезных данных, присоединенных и распространяемых блоком.
_Jtype
join
Тип блока, который это либо, либо greedy
non_greedy
Участники
Открытые конструкторы
Имя | Описание |
---|---|
join | Перегружен. Создает блок обмена сообщениями join . |
~Join Destructor | Уничтожает join блок. |
Защищенные методы
Имя | Описание |
---|---|
accept_message | Принимает сообщение, которое было предложено этим join блоком обмена сообщениями, передавая владельца вызывающему объекту. |
consume_message | Использует сообщение, предлагаемое ранее блоком join обмена сообщениями и зарезервированным целевым объектом, передавая владельца вызывающему объекту. |
link_target_notification | Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим join блоком обмена сообщениями. |
propagate_message | Асинхронно передает сообщение из ISource блока в этот join блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока. |
propagate_to_any_targets | Создает выходное сообщение, содержащее входное сообщение из каждого источника, когда все они распространили сообщение. Отправляет это выходное сообщение каждому из своих целевых объектов. |
release_message | Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.) |
reserve_message | Резервирует сообщение, ранее предлагаемое этим join блоком обмена сообщениями. (Переопределяет source_block::reserve_message.) |
resume_propagation | Возобновляет распространение после освобождения резервирования. (Переопределяет source_block::resume_propagation.) |
Замечания
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
join
Требования
Заголовок: agents.h
Пространство имен: concurrency
accept_message
Принимает сообщение, которое было предложено этим join
блоком обмена сообщениями, передавая владельца вызывающему объекту.
virtual message<_OutputType>* accept_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Предлагаемый runtime_object_identity
message
объект.
Возвращаемое значение
Указатель на объект, на который вызывающий message
объект теперь имеет право владения.
consume_message
Использует сообщение, предлагаемое ранее блоком join
обмена сообщениями и зарезервированным целевым объектом, передавая владельца вызывающему объекту.
virtual message<_OutputType>* consume_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Используемый runtime_object_identity
message
объект.
Возвращаемое значение
Указатель на объект, на который вызывающий message
объект теперь имеет право владения.
Замечания
accept
Аналогично, но всегда предшествует вызовуreserve
.
join
Создает блок обмена сообщениями join
.
join(
size_t _NumInputs);
join(
size_t _NumInputs,
filter_method const& _Filter);
join(
Scheduler& _PScheduler,
size_t _NumInputs);
join(
Scheduler& _PScheduler,
size_t _NumInputs,
filter_method const& _Filter);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs,
filter_method const& _Filter);
Параметры
_NumInputs
Число входных данных этого join
блока будет разрешено.
_Фильтр
Функция фильтра, которая определяет, следует ли принимать предлагаемые сообщения.
_PScheduler
Объект Scheduler
, в котором запланирована задача распространения для блока обмена сообщениями join
.
_PScheduleGroup
Объект ScheduleGroup
, в котором запланирована задача распространения для блока обмена сообщениями join
. Используемый объект Scheduler
подразумевается группой расписаний.
Замечания
Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler
или _PScheduleGroup
.
Тип filter_method
— это functor с подписью bool (T const &)
, которая вызывается этим join
блоком обмена сообщениями, чтобы определить, следует ли принимать предлагаемое сообщение.
~соединять
Уничтожает join
блок.
~join();
link_target_notification
Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим join
блоком обмена сообщениями.
virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);
propagate_message
Асинхронно передает сообщение из ISource
блока в этот join
блок обмена сообщениями. Вызывается методом propagate
при вызове исходного блока.
message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Параметры
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
propagate_to_any_targets
Создает выходное сообщение, содержащее входное сообщение из каждого источника, когда все они распространили сообщение. Отправляет это выходное сообщение каждому из своих целевых объектов.
void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);
release_message
Освобождает предыдущее резервирование сообщений.
virtual void release_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Объект runtime_object_identity
, message
который освобождается.
reserve_message
Резервирует сообщение, ранее предлагаемое этим join
блоком обмена сообщениями.
virtual bool reserve_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Предлагаемый runtime_object_identity
message
объект.
Возвращаемое значение
true
Значение , если сообщение успешно зарезервировано, false
в противном случае.
Замечания
После reserve
вызова, если он возвращается true
, consume
release
либо должен вызываться для принятия или освобождения владения сообщением.
resume_propagation
Возобновляет распространение после освобождения резервирования.
virtual void resume_propagation();
См. также
Пространство имен concurrency
Класс choice
Класс multitype_join