Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Блок обмена сообщениями 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.) |
Замечания
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
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