Класс multitype_joinmultitype_join Class

Блок обмена сообщениями multitype_join — это блок с несколькими источниками и одной целью, который объединяет сообщения разных типов от каждого из своих источников и предлагает кортеж объединенных сообщений своему целевому объекту.A multitype_join messaging block is a multi-source, single-target messaging block that combines together messages of different types from each of its sources and offers a tuple of the combined messages to its targets.

СинтаксисSyntax

template<
    typename T,
    join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;

ПараметрыParameters

TT
tupleТип полезных данных сообщений, соединяемых и распространяемых блоком.The tuple payload type of the messages joined and propagated by the block.

_Jtype_Jtype
Тип join блока: greedy или non_greedyThe kind of join block this is, either greedy or non_greedy

ЭлементыMembers

Общедоступные определения типовPublic Typedefs

ИмяName ОписаниеDescription
type Псевдоним типа для T .A type alias for T.

Открытые конструкторыPublic Constructors

nameName ОписаниеDescription
multitype_joinmultitype_join Перегружен.Overloaded. Создает блок обмена сообщениями multitype_join .Constructs a multitype_join messaging block.
Деструктор ~ multitype_join~multitype_join Destructor Уничтожает multitype_join блок обмена сообщениями.Destroys the multitype_join messaging block.

Открытые методыPublic Methods

nameName ОписаниеDescription
гласитaccept Принимает сообщение, которое было предложено этим multitype_join блоком, передавая владение вызывающему объекту.Accepts a message that was offered by this multitype_join block, transferring ownership to the caller.
acquire_refacquire_ref Получает счетчик ссылок multitype_join для этого блока обмена сообщениями, чтобы предотвратить удаление.Acquires a reference count on this multitype_join messaging block, to prevent deletion.
потребляющиеconsume Использует сообщение, которое было ранее предложено multitype_join блоком обмена сообщениями и успешно зарезервировано целевым объектом, передавая владение вызывающему объекту.Consumes a message previously offered by the multitype_join messaging block and successfully reserved by the target, transferring ownership to the caller.
link_targetlink_target Связывает целевой блок с этим multitype_join блоком обмена сообщениями.Links a target block to this multitype_join messaging block.
отпусканииrelease Освобождает предыдущее успешное резервирование сообщения.Releases a previous successful message reservation.
release_refrelease_ref Освобождает счетчик ссылок в этом multiple_join блоке обмена сообщениями.Releases a reference count on this multiple_join messaging block.
предназначенreserve Резервирует сообщение, которое было ранее предложено этим multitype_join блоком обмена сообщениями.Reserves a message previously offered by this multitype_join messaging block.
unlink_targetunlink_target Отменяет связь целевого блока с этим multitype_join блоком обмена сообщениями.Unlinks a target block from this multitype_join messaging block.
unlink_targetsunlink_targets Отменяет связь со всеми целевыми объектами из этого multitype_join блока обмена сообщениями.Unlinks all targets from this multitype_join messaging block. (Переопределяет метод ISource:: unlink_targets.)(Overrides ISource::unlink_targets.)

КомментарииRemarks

Дополнительные сведения см. в разделе асинхронные блоки сообщений.For more information, see Asynchronous Message Blocks.

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

ISourceISource

multitype_join

ТребованияRequirements

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

Пространство имен: параллелизмNamespace: concurrency

гласитaccept

Принимает сообщение, которое было предложено этим multitype_join блоком, передавая владение вызывающему объекту.Accepts a message that was offered by this multitype_join block, transferring ownership to the caller.

virtual message<_Destination_type>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

ПараметрыParameters

_MsgId_MsgId
runtime_object_identityОбъект предлагаемого message объекта.The runtime_object_identity of the offered message object.

_PTarget_PTarget
Указатель на целевой блок, вызывающий accept метод.A pointer to the target block that is calling the accept method.

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

Указатель на сообщение о том, что вызывающий объект теперь является владельцем.A pointer to the message that the caller now has ownership of.

acquire_refacquire_ref

Получает счетчик ссылок multitype_join для этого блока обмена сообщениями, чтобы предотвратить удаление.Acquires a reference count on this multitype_join messaging block, to prevent deletion.

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

ПараметрыParameters

_PTarget_PTarget
Указатель на целевой блок, вызывающий этот метод.A pointer to the target block that is calling this method.

КомментарииRemarks

Этот метод вызывается ITarget объектом, который связан с этим источником во время выполнения link_target метода.This method is called by an ITarget object that is being linked to this source during the link_target method.

потребляющиеconsume

Использует сообщение, которое было ранее предложено multitype_join блоком обмена сообщениями и успешно зарезервировано целевым объектом, передавая владение вызывающему объекту.Consumes a message previously offered by the multitype_join messaging block and successfully reserved by the target, transferring ownership to the caller.

virtual message<_Destination_type>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

ПараметрыParameters

_MsgId_MsgId
runtime_object_identityОбъект зарезервированного message объекта.The runtime_object_identity of the reserved message object.

_PTarget_PTarget
Указатель на целевой блок, вызывающий consume метод.A pointer to the target block that is calling the consume method.

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

Указатель на message объект, владельцем которого стал вызывающий объект.A pointer to the message object that the caller now has ownership of.

КомментарииRemarks

consumeМетод аналогичен accept , но ему всегда должен предшествовать вызов reserve , который возвращает true .The consume method is similar to accept, but must always be preceded by a call to reserve that returned true.

Связывает целевой блок с этим multitype_join блоком обмена сообщениями.Links a target block to this multitype_join messaging block.

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

ПараметрыParameters

_PTarget_PTarget
Указатель на ITarget блок, связываемый с этим multitype_join блоком обмена сообщениями.A pointer to an ITarget block to link to this multitype_join messaging block.

multitype_joinmultitype_join

Создает блок обмена сообщениями multitype_join .Constructs a multitype_join messaging block.

explicit multitype_join(
    T _Tuple);

multitype_join(
    Scheduler& _PScheduler,
    T _Tuple);

multitype_join(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

multitype_join(
    multitype_join&& _Join);

ПараметрыParameters

_Tuple_Tuple
Объект tuple источников для этого блока обмена сообщениями multitype_join .A tuple of sources for this multitype_join messaging block.

_PScheduler_PScheduler
Объект Scheduler , в котором запланирована задача распространения для блока обмена сообщениями multitype_join .The Scheduler object within which the propagation task for the multitype_join messaging block is scheduled.

_PScheduleGroup_PScheduleGroup
Объект ScheduleGroup , в котором запланирована задача распространения для блока обмена сообщениями multitype_join .The ScheduleGroup object within which the propagation task for the multitype_join messaging block is scheduled. Используемый объект Scheduler подразумевается группой расписаний.The Scheduler object used is implied by the schedule group.

_Join_Join
Блок обмена сообщениями multitype_join , из которого выполняется копирование.A multitype_join messaging block to copy from. Обратите внимание, что исходный объект становится потерянным, превращая этот конструктор в конструктор перемещения.Note that the original object is orphaned, making this a move constructor.

КомментарииRemarks

Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler или _PScheduleGroup .The runtime uses the default scheduler if you do not specify the _PScheduler or _PScheduleGroup parameters.

Конструкция перемещения не выполняется при блокировке. Это означает, что пользователь должен убедиться в отсутствии простых задач во время перемещения.Move construction is not performed under a lock, which means that it is up to the user to make sure that there are no light-weight tasks in flight at the time of moving. В противном случае могут возникнуть многочисленные гонки, приводящие к исключениям или недопустимому состоянию.Otherwise, numerous races can occur, leading to exceptions or inconsistent state.

~ multitype_join~multitype_join

Уничтожает multitype_join блок обмена сообщениями.Destroys the multitype_join messaging block.

~multitype_join();

отпусканииrelease

Освобождает предыдущее успешное резервирование сообщения.Releases a previous successful message reservation.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

ПараметрыParameters

_MsgId_MsgId
runtime_object_identity message Объект для освобожденного объекта.The runtime_object_identity of the message object being released.

_PTarget_PTarget
Указатель на целевой блок, вызывающий release метод.A pointer to the target block that is calling the release method.

release_refrelease_ref

Освобождает счетчик ссылок в этом multiple_join блоке обмена сообщениями.Releases a reference count on this multiple_join messaging block.

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

ПараметрыParameters

_PTarget_PTarget
Указатель на целевой блок, вызывающий этот метод.A pointer to the target block that is calling this method.

КомментарииRemarks

Этот метод вызывается ITarget объектом, для которого удаляется связь из этого источника.This method is called by an ITarget object that is being unlinked from this source. Блоку источника разрешено освобождать все ресурсы, зарезервированные для целевого блока.The source block is allowed to release any resources reserved for the target block.

предназначенreserve

Резервирует сообщение, которое было ранее предложено этим multitype_join блоком обмена сообщениями.Reserves a message previously offered by this multitype_join messaging block.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

ПараметрыParameters

_MsgId_MsgId
runtime_object_identity message Объект для резервируемого объекта.The runtime_object_identity of the message object being reserved.

_PTarget_PTarget
Указатель на целевой блок, вызывающий reserve метод.A pointer to the target block that is calling the reserve method.

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

true значение, если сообщение было успешно зарезервировано, false в противном случае.true if the message was successfully reserved, false otherwise. Резервирования могут завершаться неудачей по ряду причин, включая следующие: сообщение уже было зарезервировано или принято другим целевым объектом, источник может отклонять резервирования и т. п.Reservations can fail for many reasons, including: the message was already reserved or accepted by another target, the source could deny reservations, and so forth.

КомментарииRemarks

После вызова метода reserve , если он выполняется, необходимо вызвать метод consume или release , чтобы получить или предоставить владение сообщениями соответственно.After you call reserve, if it succeeds, you must call either consume or release in order to take or give up possession of the message, respectively.

Отменяет связь целевого блока с этим multitype_join блоком обмена сообщениями.Unlinks a target block from this multitype_join messaging block.

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

ПараметрыParameters

_PTarget_PTarget
Указатель на ITarget блок, который необходимо удалить из этого multitype_join блока сообщений.A pointer to an ITarget block to unlink from this multitype_join messaging block.

Отменяет связь со всеми целевыми объектами из этого multitype_join блока обмена сообщениями.Unlinks all targets from this multitype_join messaging block.

virtual void unlink_targets();

См. также разделSee also

Пространство имен Concurrencyconcurrency Namespace
Класс choicechoice Class
Класс joinjoin Class