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


Присоединиться к классу

Блок обмена сообщениями 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 обмена сообщениями и зарезервированное целевым объектом, передавая право собственности вызывающему объекту.
уведомление_о_цели_ссылки Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим join блоком обмена сообщениями.
propagate_message Асинхронно передает сообщение из ISource блока в этот join блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.
распространить_на_любые_цели Создает выходное сообщение, содержащее входное сообщение из каждого источника, когда все они распространили сообщение. Отправляет это выходное сообщение каждому из своих целевых объектов.
release_message Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.)
reserve_message Резервирует сообщение, ранее предлагаемое этим join блоком обмена сообщениями. (Переопределяет source_block::reserve_message.)
возобновить распространение Возобновляет распространение после освобождения бронирования. (Переопределяет source_block::resume_propagation.)

Замечания

Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".

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

ISource

ITarget

source_block

блок распространителя

join

Требования

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

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

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

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

virtual message<_OutputType>* accept_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Предлагаемый runtime_object_identitymessage объект.

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

Указатель на объект message, которым теперь владеет вызывающий.

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

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

virtual message<_OutputType>* consume_message(runtime_object_identity _MsgId);

Параметры

_MsgId
runtime_object_identity объекта message, который используется.

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

Указатель на объект message, право владения которым теперь переходит к вызывающему.

Замечания

Аналогично accept, но всегда вызывается после reserve.

присоединиться

Создает блок обмена сообщениями 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();

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

virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);

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

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

message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

Параметры

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

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

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

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

распроcтранить_на_любые_цели

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

void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);

сообщение о выпуске

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

virtual void release_message(runtime_object_identity _MsgId);

Параметры

_MsgId
runtime_object_identity объекта message, который освобождается.

сообщение_о_резервировании

Резервирует сообщение, ранее предлагаемое этим join блоком обмена сообщениями.

virtual bool reserve_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Предлагаемый runtime_object_identitymessage объект.

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

true если сообщение успешно забронировано, false в противном случае.

Замечания

После вызова reserve, если он возвращает true, должен быть вызван либо consume, либо release для принятия или освобождения владения сообщением.

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

Возобновляет распространение после освобождения бронирования.

virtual void resume_propagation();

См. также

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