single_assignment 메시징 블록은 하나의 한 번 쓰기 message를 저장할 수 있는, 순서가 지정된 다중 대상 다중 소스 propagator_block입니다.
구문
template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
매개 변수
T
버퍼에 의해 저장되고 전파되는 메시지의 페이로드 형식입니다.
멤버
공용 생성자
| 속성 | 설명 |
|---|---|
| single_assignment | 오버로드됨. single_assignment 메시징 블록을 생성합니다. |
| ~single_assignment 소멸자 | 메시징 블록을 삭제합니다 single_assignment . |
공용 메서드
| 이름 | 설명 |
|---|---|
| has_value | 이 single_assignment 메시징 블록이 아직 값으로 초기화되었는지 여부를 확인합니다. |
| value | 메시징 블록에 저장되는 메시지의 현재 페이로드에 대한 참조를 single_assignment 가져옵니다. |
보호된 메서드
| 속성 | 설명 |
|---|---|
| accept_message | 이 single_assignment 메시징 블록에서 제공한 메시지를 수락하고 메시지 복사본을 호출자에게 반환합니다. |
| consume_message | 이전에 대상에서 제공하고 single_assignment 예약한 메시지를 사용하여 메시지의 복사본을 호출자에게 반환합니다. |
| link_target_notification | 새 대상이 이 single_assignment 메시징 블록에 연결되었음을 나타내는 콜백입니다. |
| propagate_message | 블록에서 ISource 이 single_assignment 메시징 블록으로 메시지를 비동기적으로 전달합니다. 소스 블록에서 호출할 propagate 때 메서드에 의해 호출됩니다. |
| propagate_to_any_targets | message _PMessage 이 single_assignment 메시징 블록에 배치하고 연결된 모든 대상에 제공합니다. |
| release_message | 이전 메시지 예약을 해제합니다. (source_block::release_message 재정의) |
| reserve_message | 이 single_assignment 메시징 블록에서 이전에 제공한 메시지를 예약합니다. (source_block::reserve_message 재정의) |
| resume_propagation | 예약이 해제된 후 전파를 다시 시작합니다. (source_block::resume_propagation 재정의) |
| send_message | 블록에서 ISource 이 single_assignment 메시징 블록으로 메시지를 동기적으로 전달합니다. 소스 블록에서 호출할 send 때 메서드에 의해 호출됩니다. |
설명
메시징 블록은 single_assignment 메시지의 복사본을 각 대상에 전파합니다.
자세한 내용은 비동기 메시지 블록을 참조 하세요.
상속 계층 구조
single_assignment
요구 사항
헤더: agents.h
네임스페이스: 동시성
accept_message
이 single_assignment 메시징 블록에서 제공한 메시지를 수락하고 메시지 복사본을 호출자에게 반환합니다.
virtual message<T>* accept_message(runtime_object_identity _MsgId);
매개 변수
_MsgId
runtime_object_identity 제공 message 된 개체의 개체입니다.
Return Value
호출자의 소유권이 message 있는 개체에 대한 포인터입니다.
설명
메시징 블록은 single_assignment 현재 보유된 메시지의 소유권을 전송하는 대신 대상에 메시지의 복사본을 반환합니다.
consume_message
이전에 대상에서 제공하고 single_assignment 예약한 메시지를 사용하여 메시지의 복사본을 호출자에게 반환합니다.
virtual message<T>* consume_message(runtime_object_identity _MsgId);
매개 변수
_MsgId
runtime_object_identity 사용 중인 개체의 message 개체입니다.
Return Value
호출자의 소유권이 message 있는 개체에 대한 포인터입니다.
설명
은 accept유사하지만 항상 호출 앞에 있습니다 reserve.
has_value
이 single_assignment 메시징 블록이 아직 값으로 초기화되었는지 여부를 확인합니다.
bool has_value() const;
Return Value
true 블록이 값을 false 수신하면 그렇지 않습니다.
link_target_notification
새 대상이 이 single_assignment 메시징 블록에 연결되었음을 나타내는 콜백입니다.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
매개 변수
_PTarget
새로 연결된 대상에 대한 포인터입니다.
propagate_message
블록에서 ISource 이 single_assignment 메시징 블록으로 메시지를 비동기적으로 전달합니다. 소스 블록에서 호출할 propagate 때 메서드에 의해 호출됩니다.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
매개 변수
_PMessage
message 개체에 대한 포인터입니다.
_PSource
메시지를 제공하는 소스 블록에 대한 포인터입니다.
Return Value
대상이 메시지로 무엇을 하기로 결정했는지에 대한 message_status 표시입니다.
propagate_to_any_targets
message _PMessage 이 single_assignment 메시징 블록에 배치하고 연결된 모든 대상에 제공합니다.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
매개 변수
_PMessage
이 single_assignment 메시징 블록이 소유권을 message 가져온 포인터입니다.
release_message
이전 메시지 예약을 해제합니다.
virtual void release_message(runtime_object_identity _MsgId);
매개 변수
_MsgId
runtime_object_identity 해제되는 개체의 message 수입니다.
reserve_message
이 single_assignment 메시징 블록에서 이전에 제공한 메시지를 예약합니다.
virtual bool reserve_message(runtime_object_identity _MsgId);
매개 변수
_MsgId
runtime_object_identity 예약 중인 개체의 message 개체입니다.
Return Value
true 메시지가 성공적으로 예약 false 되었으면 그렇지 않습니다.
설명
호출된 후 reserve 반환 trueconsume 되는 경우 메시지의 소유권을 취하거나 release 해제하기 위해 호출해야 합니다.
resume_propagation
예약이 해제된 후 전파를 다시 시작합니다.
virtual void resume_propagation();
send_message
블록에서 ISource 이 single_assignment 메시징 블록으로 메시지를 동기적으로 전달합니다. 소스 블록에서 호출할 send 때 메서드에 의해 호출됩니다.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
매개 변수
_PMessage
message 개체에 대한 포인터입니다.
_PSource
메시지를 제공하는 소스 블록에 대한 포인터입니다.
Return Value
대상이 메시지로 무엇을 하기로 결정했는지에 대한 message_status 표시입니다.
single_assignment
single_assignment 메시징 블록을 생성합니다.
single_assignment();
single_assignment(
filter_method const& _Filter);
single_assignment(
Scheduler& _PScheduler);
single_assignment(
Scheduler& _PScheduler,
filter_method const& _Filter);
single_assignment(
ScheduleGroup& _PScheduleGroup);
single_assignment(
ScheduleGroup& _PScheduleGroup,
filter_method const& _Filter);
매개 변수
_필터
제공된 메시지를 수락해야 하는지 여부를 결정하는 필터 함수입니다.
_PScheduler
Scheduler 메시징 블록의 전파 작업이 예약되는 single_assignment 개체입니다.
_PScheduleGroup
ScheduleGroup 메시징 블록의 전파 작업이 예약되는 single_assignment 개체입니다. 사용된 Scheduler 개체는 일정 그룹에서 암시됩니다.
설명
런타임은 _PScheduler 또는 _PScheduleGroup 매개 변수를 지정하지 않는 경우 기본 스케줄러를 사용합니다.
이 형식 filter_method 은 제공된 메시지를 수락해야 하는지 여부를 결정하기 위해 이 single_assignment 메시징 블록에서 호출하는 서명 bool (T const &) 이 있는 functor입니다.
~single_assignment
메시징 블록을 삭제합니다 single_assignment .
~single_assignment();
value
메시징 블록에 저장되는 메시지의 현재 페이로드에 대한 참조를 single_assignment 가져옵니다.
T const& value();
Return Value
저장된 메시지의 페이로드입니다.
설명
이 메서드는 메시지 블록에 현재 저장된 single_assignment 메시지가 없는 경우 메시지가 도착할 때까지 대기합니다.
참고 항목
concurrency 네임스페이스
overwrite_buffer 클래스
unbounded_buffer 클래스