Класс 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 Тип блока, который это либо, либо greedynon_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.)

Замечания

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

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

ISource

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_identitymessage объект.

_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_identitymessage объект.

_PTarget
Указатель на целевой блок, вызывающий consume метод.

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

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

Замечания

Метод consume аналогичен accept, но всегда должен предшествовать вызову reserve возвращаемого true.

Связывает целевой блок с этим 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_identitymessage объект.

_PTarget
Указатель на целевой блок, вызывающий reserve метод.

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

true Значение , если сообщение успешно зарезервировано, false в противном случае. Резервирования могут завершаться неудачей по ряду причин, включая следующие: сообщение уже было зарезервировано или принято другим целевым объектом, источник может отклонять резервирования и т. п.

Замечания

После вызова reserve, если оно выполнено успешно, необходимо вызвать либо consume либо release , чтобы принять или отказаться от владения сообщением соответственно.

Отменяет связь целевого блока из этого multitype_join блока обмена сообщениями.

virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);

Параметры

_PTarget
Указатель на блок для отмены связи с этим multitype_join блоком ITarget обмена сообщениями.

Отменяет связь всех целевых объектов из этого multitype_join блока обмена сообщениями.

virtual void unlink_targets();

См. также

Пространство имен concurrency
Класс choice
Класс join