choice 클래스choice Class

choice 메시징 블록은 소스 집합과의 제어 흐름 상호 작용을 나타내는 다중 소스 단일 대상 블록입니다.A choice messaging block is a multi-source, single-target block that represents a control-flow interaction with a set of sources. 선택한 블록은 여러 소스 중 하나가 메시지를 생성할 때까지 대기하고 메시지를 생성한 소스의 인덱스를 전파합니다.The choice block will wait for any one of multiple sources to produce a message and will propagate the index of the source that produced the message.

구문Syntax

template<
    class T
>
class choice: public ISource<size_t>;

매개 변수Parameters

TT
tuple입력 소스의 페이로드를 나타내는 기반 형식입니다.A tuple-based type representing the payloads of the input sources.

멤버Members

공용 TypedefsPublic Typedefs

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

Public 생성자Public Constructors

NameName 설명Description
choicechoice 오버로드되었습니다.Overloaded. choice 메시징 블록을 생성합니다.Constructs a choice messaging block.
~ choice 소멸자~choice Destructor 메시징 블록을 소멸 시킵니다 choice .Destroys the choice messaging block.

Public 메서드Public Methods

이름Name 설명Description
수락할accept choice호출자에 게 소유권을 전송 하는이 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this choice block, transferring ownership to the caller.
acquire_refacquire_ref choice삭제를 방지 하기 위해이 메시징 블록의 참조 횟수를 가져옵니다.Acquires a reference count on this choice messaging block, to prevent deletion.
활용consume 이 메시징 블록에서 이전에 제공 하 고 대상에 의해 성공적으로 예약 된 메시지를 사용 하 여 choice 호출자에 게 소유권을 전송 합니다.Consumes a message previously offered by this choice messaging block and successfully reserved by the target, transferring ownership to the caller.
has_valuehas_value choice 메시징 블록이 아직 값을 사용 하 여 초기화 되었는지 여부를 확인 합니다.Checks whether this choice messaging block has been initialized with a value yet.
indexindex tuple메시징 블록에서 선택한 요소를 나타내는에 대 한 인덱스를 반환 합니다 choice .Returns an index into the tuple representing the element selected by the choice messaging block.
link_targetlink_target 대상 블록을이 choice 메시징 블록에 연결 합니다.Links a target block to this choice messaging block.
릴리스release 이전의 성공적인 메시지 예약을 해제 합니다.Releases a previous successful message reservation.
release_refrelease_ref 이 메시징 블록에서 참조 횟수를 해제 choice 합니다.Releases a reference count on this choice messaging block.
두기reserve 이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 choice 합니다.Reserves a message previously offered by this choice messaging block.
unlink_targetunlink_target 이 메시징 블록에서 대상 블록을 해제 choice 합니다.Unlinks a target block from this choice messaging block.
unlink_targetsunlink_targets 이 메시징 블록에서 모든 대상을 해제 choice 합니다.Unlinks all targets from this choice messaging block. ( ISource:: unlink_targets을 재정의 합니다.)(Overrides ISource::unlink_targets.)
valuevalue 메시지 블록에서 해당 인덱스를 선택한 메시지를 가져옵니다 choice .Gets the message whose index was selected by the choice messaging block.

설명Remarks

선택 블록을 사용 하면 들어오는 메시지 중 하나만 사용 됩니다.The choice block ensures that only one of the incoming messages is consumed.

자세한 내용은 비동기 메시지 블록을 참조 하세요.For more information, see Asynchronous Message Blocks.

상속 계층 구조Inheritance Hierarchy

ISourceISource

choice

요구 사항Requirements

헤더: agents.hHeader: agents.h

네임 스페이스: 동시성Namespace: concurrency

수락할accept

choice호출자에 게 소유권을 전송 하는이 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this choice block, transferring ownership to the caller.

virtual message<size_t>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _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

choice삭제를 방지 하기 위해이 메시징 블록의 참조 횟수를 가져옵니다.Acquires a reference count on this choice messaging block, to prevent deletion.

virtual void acquire_ref(_Inout_ ITarget<size_t>* _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.

적절choice

choice 메시징 블록을 생성합니다.Constructs a choice messaging block.

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

매개 변수Parameters

_Tuple_Tuple
선택을 위한 소스의 tuple 입니다.A tuple of sources for the choice.

_PScheduler_PScheduler
Scheduler 메시징 블록의 전파 작업이 예약되는 choice 개체입니다.The Scheduler object within which the propagation task for the choice messaging block is scheduled.

_PScheduleGroup_PScheduleGroup
ScheduleGroup 메시징 블록의 전파 작업이 예약되는 choice 개체입니다.The ScheduleGroup object within which the propagation task for the choice messaging block is scheduled. 사용된 Scheduler 개체는 일정 그룹에서 암시됩니다.The Scheduler object used is implied by the schedule group.

_Choice_Choice
복사할 choice 메시징 블록입니다.A choice 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.

~ choice~choice

메시징 블록을 소멸 시킵니다 choice .Destroys the choice messaging block.

~choice();

활용consume

이 메시징 블록에서 이전에 제공 하 고 대상에 의해 성공적으로 예약 된 메시지를 사용 하 여 choice 호출자에 게 소유권을 전송 합니다.Consumes a message previously offered by this choice messaging block and successfully reserved by the target, transferring ownership to the caller.

virtual message<size_t>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _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.

has_valuehas_value

choice 메시징 블록이 아직 값을 사용 하 여 초기화 되었는지 여부를 확인 합니다.Checks whether this choice messaging block has been initialized with a value yet.

bool has_value() const;

Return ValueReturn Value

true 블록에서 값을 받았으면이 고, false 그렇지 않으면입니다.true if the block has received a value, false otherwise.

인덱싱할index

tuple메시징 블록에서 선택한 요소를 나타내는에 대 한 인덱스를 반환 합니다 choice .Returns an index into the tuple representing the element selected by the choice messaging block.

size_t index();

Return ValueReturn Value

메시지 인덱스입니다.The message index.

설명Remarks

메시지 페이로드는 메서드를 사용 하 여 추출할 수 있습니다 get .The message payload can be extracted using the get method.

대상 블록을이 choice 메시징 블록에 연결 합니다.Links a target block to this choice messaging block.

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

매개 변수Parameters

_PTarget_PTarget
ITarget이 메시징 블록에 연결할 블록에 대 한 포인터 choice 입니다.A pointer to an ITarget block to link to this choice messaging block.

릴리스release

이전의 성공적인 메시지 예약을 해제 합니다.Releases a previous successful message reservation.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _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

이 메시징 블록에서 참조 횟수를 해제 choice 합니다.Releases a reference count on this choice messaging block.

virtual void release_ref(_Inout_ ITarget<size_t>* _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

이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 choice 합니다.Reserves a message previously offered by this choice messaging block.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<size_t>* _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.

이 메시징 블록에서 대상 블록을 해제 choice 합니다.Unlinks a target block from this choice messaging block.

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

매개 변수Parameters

_PTarget_PTarget
ITarget이 메시징 블록에서 연결을 해제할 블록에 대 한 포인터 choice 입니다.A pointer to an ITarget block to unlink from this choice messaging block.

이 메시징 블록에서 모든 대상을 해제 choice 합니다.Unlinks all targets from this choice messaging block.

virtual void unlink_targets();

설명Remarks

내부 블록의 소멸자 single_assignment 가 제대로 연결 해제 되므로이 메서드를 소멸자에서 호출할 필요가 없습니다.This method does not need to be called from the destructor because destructor for the internal single_assignment block will unlink properly.

value

메시지 블록에서 해당 인덱스를 선택한 메시지를 가져옵니다 choice .Gets the message whose index was selected by the choice messaging block.

template <
    typename _Payload_type
>
_Payload_type const& value();

매개 변수Parameters

_Payload_type_Payload_type
메시지 페이로드의 유형입니다.The type of the message payload.

Return ValueReturn Value

메시지의 페이로드입니다.The payload of the message.

설명Remarks

choice 메시징 블록은 페이로드 형식이 서로 다른 입력을 사용할 수 있기 때문에 검색 시 페이로드의 형식을 지정해야 합니다.Because a choice messaging block can take inputs with different payload types, you must specify the type of the payload at the point of retrieval. 메서드의 결과에 따라 형식을 결정할 수 있습니다 index .You can determine the type based on the result of the index method.

참고 항목See also

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