choice 클래스

choice 메시징 블록은 소스 집합과의 제어 흐름 상호 작용을 나타내는 다중 소스 단일 대상 블록입니다. 선택한 블록은 여러 소스 중 하나가 메시지를 생성할 때까지 대기하고 메시지를 생성한 소스의 인덱스를 전파합니다.

구문

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

매개 변수

T
tuple입력 소스의 페이로드를 나타내는 기반 형식입니다.

멤버

공용 Typedefs

이름 설명
type 에 대한 형식 별칭입니다 T.

공용 생성자

속성 설명
choice 오버로드됨. choice 메시징 블록을 생성합니다.
~choice 소멸자 메시징 블록을 삭제합니다 choice .

공용 메서드

이름 설명
받아들일 choice 블록에서 제공한 메시지를 수락하여 소유권을 호출자에게 전송합니다.
acquire_ref 삭제를 방지하기 위해 이 choice 메시징 블록에 대한 참조 횟수를 가져옵니다.
소비 이전에 이 choice 메시징 블록에서 제공한 메시지를 사용하고 대상에서 성공적으로 예약하여 소유권을 호출자에게 전송합니다.
has_value choice 메시징 블록이 아직 값으로 초기화되었는지 여부를 확인합니다.
인덱스 메시징 블록에서 tuple 선택한 요소를 나타내는 인덱스 값을 choice 반환합니다.
link_target 대상 블록을 이 choice 메시징 블록에 연결합니다.
release 이전에 성공한 메시지 예약을 해제합니다.
release_ref choice 메시징 블록에 대한 참조 횟수를 해제합니다.
reserve choice 메시징 블록에서 이전에 제공한 메시지를 예약합니다.
unlink_target choice 메시징 블록에서 대상 블록의 연결을 해제합니다.
unlink_targets choice 메시징 블록에서 모든 대상의 연결을 해제합니다. (재정의 ISource::unlink_targets.)
value 메시징 블록에서 인덱스가 선택된 choice 메시지를 가져옵니다.

설명

선택 블록은 들어오는 메시지 중 하나만 사용되도록 합니다.

자세한 내용은 비동기 메시지 블록을 참조 하세요.

상속 계층 구조

Isource

choice

요구 사항

헤더: agents.h

네임스페이스: 동시성

동의

choice 블록에서 제공한 메시지를 수락하여 소유권을 호출자에게 전송합니다.

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

매개 변수

_MsgId
runtime_object_identity 제공 message 된 개체의 개체입니다.

_PTarget
메서드를 호출하는 대상 블록에 대한 accept 포인터입니다.

Return Value

이제 호출자의 소유권이 있는 메시지에 대한 포인터입니다.

acquire_ref

삭제를 방지하기 위해 이 choice 메시징 블록에 대한 참조 횟수를 가져옵니다.

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

매개 변수

_PTarget
이 메서드를 호출하는 대상 블록에 대한 포인터입니다.

설명

이 메서드는 메서드 중에 link_target 이 원본에 연결된 개체에 의해 ITarget 호출됩니다.

선택 항목

choice 메시징 블록을 생성합니다.

explicit choice(
    T _Tuple);

choice(
    Scheduler& _PScheduler,
    T _Tuple);

choice(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

choice(
    choice&& _Choice);

매개 변수

_튜플
선택을 위한 소스의 tuple 입니다.

_PScheduler
Scheduler 메시징 블록의 전파 작업이 예약되는 choice 개체입니다.

_PScheduleGroup
ScheduleGroup 메시징 블록의 전파 작업이 예약되는 choice 개체입니다. 사용된 Scheduler 개체는 일정 그룹에서 암시됩니다.

_선택
복사할 choice 메시징 블록입니다. 원래 개체는 고아로 표시되어 생성자가 이동하도록 합니다.

설명

런타임은 _PScheduler 또는 _PScheduleGroup 매개 변수를 지정하지 않는 경우 기본 스케줄러를 사용합니다.

잠금이 있는 경우 이동 생성은 수행되지 않습니다. 즉, 이동하는 중에 간단한 작업이 실행되고 있지 않은지 확인할 책임은 사용자에게 있습니다. 그러지 않으면 수많은 레이스가 발생하여 예외가 발생하거나 일관성 없는 상태가 될 수 있습니다.

~선택

메시징 블록을 삭제합니다 choice .

~choice();

소비

이전에 이 choice 메시징 블록에서 제공한 메시지를 사용하고 대상에서 성공적으로 예약하여 소유권을 호출자에게 전송합니다.

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

매개 변수

_MsgId
runtime_object_identity 예약된 message 개체의 개체입니다.

_PTarget
메서드를 호출하는 대상 블록에 대한 consume 포인터입니다.

Return Value

호출자의 소유권이 message 있는 개체에 대한 포인터입니다.

설명

메서드 consume 는 유사accept하지만 항상 반환true된 메서드에 대한 reserve 호출 앞에 있어야 합니다.

has_value

choice 메시징 블록이 아직 값으로 초기화되었는지 여부를 확인합니다.

bool has_value() const;

Return Value

true 블록이 값을 false 수신하면 그렇지 않습니다.

색인

메시징 블록에서 tuple 선택한 요소를 나타내는 인덱스 값을 choice 반환합니다.

size_t index();

Return Value

메시지 인덱스입니다.

설명

메서드를 사용하여 메시지 페이로드를 get 추출할 수 있습니다.

대상 블록을 이 choice 메시징 블록에 연결합니다.

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

매개 변수

_PTarget
choice 메시징 블록에 ITarget 연결할 블록에 대한 포인터입니다.

릴리스

이전에 성공한 메시지 예약을 해제합니다.

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

매개 변수

_MsgId
runtime_object_identity 해제되는 개체의 message 수입니다.

_PTarget
메서드를 호출하는 대상 블록에 대한 release 포인터입니다.

release_ref

choice 메시징 블록에 대한 참조 횟수를 해제합니다.

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

매개 변수

_PTarget
이 메서드를 호출하는 대상 블록에 대한 포인터입니다.

설명

이 메서드는 이 소스에서 연결되지 않은 개체에 의해 ITarget 호출됩니다. 원본 블록은 대상 블록에 예약된 모든 리소스를 해제할 수 있습니다.

reserve

choice 메시징 블록에서 이전에 제공한 메시지를 예약합니다.

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

매개 변수

_MsgId
runtime_object_identity 예약 중인 개체의 message 개체입니다.

_PTarget
메서드를 호출하는 대상 블록에 대한 reserve 포인터입니다.

Return Value

true 메시지가 성공적으로 예약 false 되었으면 그렇지 않습니다. 예약은 메시지를 이미 다른 대상이 예약했거나 수락한 경우, 소스에서 예약을 거부한 경우 등과 같은 다양한 이유로 실패할 수 있습니다.

설명

호출reserve한 후 성공하는 경우 메시지의 소유를 각각 취하거나 release 포기하기 위해 호출 consume 해야 합니다.

choice 메시징 블록에서 대상 블록의 연결을 해제합니다.

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

매개 변수

_PTarget
choice 메시징 블록에서 연결을 해제할 블록에 대한 포인터 ITarget 입니다.

choice 메시징 블록에서 모든 대상의 연결을 해제합니다.

virtual void unlink_targets();

설명

내부 single_assignment 블록의 소멸자가 제대로 연결을 해제하므로 이 메서드를 소멸자에서 호출할 필요가 없습니다.

value

메시징 블록에서 인덱스가 선택된 choice 메시지를 가져옵니다.

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

매개 변수

_Payload_type
메시지 페이로드의 형식입니다.

Return Value

메시지의 페이로드입니다.

설명

choice 메시징 블록은 페이로드 형식이 서로 다른 입력을 사용할 수 있기 때문에 검색 시 페이로드의 형식을 지정해야 합니다. 메서드의 index 결과에 따라 형식을 확인할 수 있습니다.

참고 항목

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