Класс multitype_join
Блок обмена сообщениями multitype_join
— это блок с несколькими источниками и одной целью, который объединяет сообщения разных типов от каждого из своих источников и предлагает кортеж объединенных сообщений своему целевому объекту.
Синтаксис
template<
typename T,
join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;
Параметры
T
Тип tuple
полезных данных, присоединенных и распространяемых блоком.
_Jtype
join
Тип блока, который это либо, либо greedy
non_greedy
Участники
Общедоступные определения типов
Имя | Описание |
---|---|
type |
Псевдоним типа для T . |
Открытые конструкторы
Имя | Описание |
---|---|
multitype_join | Перегружен. Создает блок обмена сообщениями multitype_join . |
Деструктор ~multitype_join | Уничтожает multitype_join блок обмена сообщениями. |
Открытые методы
Имя | Описание |
---|---|
Принять | Принимает сообщение, которое было предложено этим multitype_join блоком, передавая владение вызывающему объекту. |
acquire_ref | Получает количество ссылок в этом multitype_join блоке обмена сообщениями, чтобы предотвратить удаление. |
consume | Использует сообщение, ранее предлагаемое блоком multitype_join обмена сообщениями, и успешно зарезервировано целевым объектом, передавая владение вызывающему объекту. |
link_target | Связывает целевой блок с этим multitype_join блоком обмена сообщениями. |
release | Освобождает предыдущее успешное резервирование сообщений. |
release_ref | Освобождает количество ссылок в этом multiple_join блоке обмена сообщениями. |
reserve | Резервирует сообщение, ранее предлагаемое этим multitype_join блоком обмена сообщениями. |
unlink_target | Отменяет связь целевого блока из этого multitype_join блока обмена сообщениями. |
unlink_targets | Отменяет связь всех целевых объектов из этого multitype_join блока обмена сообщениями. (Переопределения ISource::unlink_targets.) |
Замечания
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
multitype_join
Требования
Заголовок: agents.h
Пространство имен: concurrency
accept
Принимает сообщение, которое было предложено этим multitype_join
блоком, передавая владение вызывающему объекту.
virtual message<_Destination_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_MsgId
Предлагаемый runtime_object_identity
message
объект.
_PTarget
Указатель на целевой блок, вызывающий accept
метод.
Возвращаемое значение
Указатель на сообщение о том, что вызывающий объект теперь имеет право владения.
acquire_ref
Получает количество ссылок в этом multitype_join
блоке обмена сообщениями, чтобы предотвратить удаление.
virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_PTarget
Указатель на целевой блок, вызывающий этот метод.
Замечания
Этот метод вызывается ITarget
объектом, связанным с этим источником во время link_target
метода.
использовать
Использует сообщение, ранее предлагаемое блоком multitype_join
обмена сообщениями, и успешно зарезервировано целевым объектом, передавая владение вызывающему объекту.
virtual message<_Destination_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_MsgId
Зарезервированный runtime_object_identity
message
объект.
_PTarget
Указатель на целевой блок, вызывающий consume
метод.
Возвращаемое значение
Указатель на объект, на который вызывающий message
объект теперь имеет право владения.
Замечания
Метод consume
аналогичен accept
, но всегда должен предшествовать вызову reserve
возвращаемого true
.
link_target
Связывает целевой блок с этим multitype_join
блоком обмена сообщениями.
virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_PTarget
Указатель на блок для ссылки на ITarget
этот multitype_join
блок обмена сообщениями.
multitype_join
Создает блок обмена сообщениями multitype_join
.
explicit multitype_join(
T _Tuple);
multitype_join(
Scheduler& _PScheduler,
T _Tuple);
multitype_join(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
multitype_join(
multitype_join&& _Join);
Параметры
_Кортеж
Объект tuple
источников для этого блока обмена сообщениями multitype_join
.
_PScheduler
Объект Scheduler
, в котором запланирована задача распространения для блока обмена сообщениями multitype_join
.
_PScheduleGroup
Объект ScheduleGroup
, в котором запланирована задача распространения для блока обмена сообщениями multitype_join
. Используемый объект Scheduler
подразумевается группой расписаний.
_Присоединиться к
Блок обмена сообщениями multitype_join
, из которого выполняется копирование. Обратите внимание, что исходный объект становится потерянным, превращая этот конструктор в конструктор перемещения.
Замечания
Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler
или _PScheduleGroup
.
Конструкция перемещения не выполняется при блокировке. Это означает, что пользователь должен убедиться в отсутствии простых задач во время перемещения. В противном случае могут возникнуть многочисленные гонки, приводящие к исключениям или недопустимому состоянию.
~multitype_join
Уничтожает multitype_join
блок обмена сообщениями.
~multitype_join();
выпуска
Освобождает предыдущее успешное резервирование сообщений.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_MsgId
Объект runtime_object_identity
, message
который освобождается.
_PTarget
Указатель на целевой блок, вызывающий release
метод.
release_ref
Освобождает количество ссылок в этом multiple_join
блоке обмена сообщениями.
virtual void release_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_PTarget
Указатель на целевой блок, вызывающий этот метод.
Замечания
Этот метод вызывается ITarget
объектом, который не связан с этим источником. Исходный блок может освободить все ресурсы, зарезервированные для целевого блока.
резерв
Резервирует сообщение, ранее предлагаемое этим multitype_join
блоком обмена сообщениями.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_MsgId
Зарезервированный runtime_object_identity
message
объект.
_PTarget
Указатель на целевой блок, вызывающий reserve
метод.
Возвращаемое значение
true
Значение , если сообщение успешно зарезервировано, false
в противном случае. Резервирования могут завершаться неудачей по ряду причин, включая следующие: сообщение уже было зарезервировано или принято другим целевым объектом, источник может отклонять резервирования и т. п.
Замечания
После вызова reserve
, если оно выполнено успешно, необходимо вызвать либо consume
либо release
, чтобы принять или отказаться от владения сообщением соответственно.
unlink_target
Отменяет связь целевого блока из этого multitype_join
блока обмена сообщениями.
virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);
Параметры
_PTarget
Указатель на блок для отмены связи с этим multitype_join
блоком ITarget
обмена сообщениями.
unlink_targets
Отменяет связь всех целевых объектов из этого multitype_join
блока обмена сообщениями.
virtual void unlink_targets();
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по