multitype_join 클래스multitype_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

공용 TypedefsPublic Typedefs

NameName 설명Description
type 에 대 한 형식 별칭 T 입니다.A type alias for T.

Public 생성자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 메서드Public Methods

이름Name 설명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 ValueReturn 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 ValueReturn 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 ValueReturn 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

concurrency 네임 스페이스concurrency Namespace
choice 클래스choice Class
join 클래스join Class