overwrite_buffer 클래스overwrite_buffer Class

overwrite_buffer 메시징 블록은 한 번에 하나의 메시지를 저장할 수 있는, 순서가 지정된 다중 대상 다중 소스 propagator_block입니다.An overwrite_buffer messaging block is a multi-target, multi-source, ordered propagator_block capable of storing a single message at a time. 새 메시지가 이전에 보유한 메시지를 덮어씁니다.New messages overwrite previously held ones.

구문Syntax

template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

매개 변수Parameters

TT
버퍼에 의해 저장 및 전파 되는 메시지의 페이로드 유형입니다.The payload type of the messages stored and propagated by the buffer.

멤버Members

Public 생성자Public Constructors

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

Public 메서드Public Methods

이름Name 설명Description
has_valuehas_value overwrite_buffer 메시징 블록에 아직 값이 있는지 여부를 확인 합니다.Checks whether this overwrite_buffer messaging block has a value yet.
valuevalue 메시징 블록에 저장 되는 메시지의 현재 페이로드에 대 한 참조를 가져옵니다 overwrite_buffer .Gets a reference to the current payload of the message being stored in the overwrite_buffer messaging block.

Protected 메서드Protected Methods

NameName 설명Description
accept_messageaccept_message overwrite_buffer메시지의 복사본을 호출자에 게 반환 하는이 메시징 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this overwrite_buffer messaging block, returning a copy of the message to the caller.
consume_messageconsume_message 메시징 블록에서 이전에 제공 하 고 대상에 의해 예약 된 메시지를 사용 하 여 overwrite_buffer 메시지의 복사본을 호출자에 게 반환 합니다.Consumes a message previously offered by the overwrite_buffer messaging block and reserved by the target, returning a copy of the message to the caller.
link_target_notificationlink_target_notification 새 대상이이 메시징 블록에 연결 되었음을 알리는 콜백입니다 overwrite_buffer .A callback that notifies that a new target has been linked to this overwrite_buffer messaging block.
propagate_messagepropagate_message ISource블록에서이 메시징 블록으로 메시지를 비동기적으로 전달 overwrite_buffer 합니다.Asynchronously passes a message from an ISource block to this overwrite_buffer messaging block. propagate소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the propagate method, when called by a source block.
propagate_to_any_targetspropagate_to_any_targets message _PMessageoverwrite_buffer 메시징 블록에 배치 하 고 연결 된 모든 대상에 제공 합니다.Places the message _PMessage in this overwrite_buffer messaging block and offers it to all of the linked targets.
release_messagerelease_message 이전 메시지 예약을 해제 합니다.Releases a previous message reservation. Source_block:: release_message를 재정의 합니다.(Overrides source_block::release_message.)
reserve_messagereserve_message 이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 overwrite_buffer 합니다.Reserves a message previously offered by this overwrite_buffer messaging block. Source_block:: reserve_message를 재정의 합니다.(Overrides source_block::reserve_message.)
resume_propagationresume_propagation 예약이 해제 된 후 전파를 다시 시작 합니다.Resumes propagation after a reservation has been released. Source_block:: resume_propagation를 재정의 합니다.(Overrides source_block::resume_propagation.)
send_messagesend_message ISource블록에서이 메시징 블록으로 메시지를 동기적으로 전달 overwrite_buffer 합니다.Synchronously passes a message from an ISource block to this overwrite_buffer messaging block. send소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the send method, when called by a source block.
supports_anonymous_sourcesupports_anonymous_source supports_anonymous_source 메서드를 재정의하여 이 블록이 연결되지 않은 소스에서 제공하는 메시지를 수락할 수 있음을 나타냅니다.Overrides the supports_anonymous_source method to indicate that this block can accept messages offered to it by a source that is not linked. ITarget:: supports_anonymous_source을 재정의 합니다.(Overrides ITarget::supports_anonymous_source.)

설명Remarks

overwrite_buffer메시징 블록은 저장 된 메시지의 복사본을 각 대상에 전파 합니다.An overwrite_buffer messaging block propagates out copies of its stored message to each of its targets.

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

상속 계층 구조Inheritance Hierarchy

ISourceISource

ITargetITarget

source_blocksource_block

propagator_blockpropagator_block

overwrite_buffer

요구 사항Requirements

헤더: agents.hHeader: agents.h

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

accept_messageaccept_message

overwrite_buffer메시지의 복사본을 호출자에 게 반환 하는이 메시징 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this overwrite_buffer messaging block, returning a copy of the message to the caller.

virtual message<T>* accept_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity제공 된 개체의입니다 message .The runtime_object_identity of the offered message object.

Return ValueReturn Value

message호출자가 소유 하 고 있는 개체에 대 한 포인터입니다.A pointer to the message object that the caller now has ownership of.

설명Remarks

overwrite_buffer메시징 블록은 현재 저장 된 메시지의 소유권을 전송 하는 대신 대상에 메시지의 복사본을 반환 합니다.The overwrite_buffer messaging block returns copies of the message to its targets, rather than transferring ownership of the currently held message.

consume_messageconsume_message

메시징 블록에서 이전에 제공 하 고 대상에 의해 예약 된 메시지를 사용 하 여 overwrite_buffer 메시지의 복사본을 호출자에 게 반환 합니다.Consumes a message previously offered by the overwrite_buffer messaging block and reserved by the target, returning a copy of the message to the caller.

virtual message<T>* consume_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity message 사용 되는 개체의입니다.The runtime_object_identity of the message object being consumed.

Return ValueReturn Value

message호출자가 소유 하 고 있는 개체에 대 한 포인터입니다.A pointer to the message object that the caller now has ownership of.

설명Remarks

와 비슷하지만 accept 항상를 호출 reserve 합니다.Similar to accept, but is always preceded by a call to reserve.

has_valuehas_value

overwrite_buffer 메시징 블록에 아직 값이 있는지 여부를 확인 합니다.Checks whether this overwrite_buffer messaging block has a value yet.

bool has_value() const;

Return ValueReturn Value

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

새 대상이이 메시징 블록에 연결 되었음을 알리는 콜백입니다 overwrite_buffer .A callback that notifies that a new target has been linked to this overwrite_buffer messaging block.

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

매개 변수Parameters

_PTarget_PTarget
새로 연결 된 대상에 대 한 포인터입니다.A pointer to the newly linked target.

~ overwrite_buffer~overwrite_buffer

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

~overwrite_buffer();

overwrite_bufferoverwrite_buffer

overwrite_buffer메시징 블록을 생성 합니다.Constructs an overwrite_buffer messaging block.

overwrite_buffer();

overwrite_buffer(
    filter_method const& _Filter);

overwrite_buffer(
    Scheduler& _PScheduler);

overwrite_buffer(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

overwrite_buffer(
    ScheduleGroup& _PScheduleGroup);

overwrite_buffer(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

매개 변수Parameters

_Filter_Filter
제공 된 메시지를 수락 해야 하는지 여부를 결정 하는 필터 함수입니다.A filter function which determines whether offered messages should be accepted.

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

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

설명Remarks

런타임은 _PScheduler 또는 _PScheduleGroup 매개 변수를 지정하지 않는 경우 기본 스케줄러를 사용합니다.The runtime uses the default scheduler if you do not specify the _PScheduler or _PScheduleGroup parameters.

형식은 filter_method bool (T const &) 제공 된 메시지를 overwrite_buffer 수락 해야 하는지 여부를 확인 하기 위해이 메시징 블록에 의해 호출 되는 시그니처가 포함 된 함수입니다.The type filter_method is a functor with signature bool (T const &) which is invoked by this overwrite_buffer messaging block to determine whether or not it should accept an offered message.

propagate_messagepropagate_message

ISource블록에서이 메시징 블록으로 메시지를 비동기적으로 전달 overwrite_buffer 합니다.Asynchronously passes a message from an ISource block to this overwrite_buffer messaging block. propagate소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the propagate method, when called by a source block.

virtual message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

매개 변수Parameters

_PMessage_PMessage
message 개체에 대한 포인터입니다.A pointer to the message object.

_PSource_PSource
메시지를 제공 하는 소스 블록에 대 한 포인터입니다.A pointer to the source block offering the message.

Return ValueReturn Value

대상에서 메시지를 사용 하 여 수행 하기로 결정 한 내용을 나타내는 message_status 입니다.A message_status indication of what the target decided to do with the message.

propagate_to_any_targetspropagate_to_any_targets

message _PMessageoverwrite_buffer 메시징 블록에 배치 하 고 연결 된 모든 대상에 제공 합니다.Places the message _PMessage in this overwrite_buffer messaging block and offers it to all of the linked targets.

virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);

매개 변수Parameters

_PMessage_PMessage
message이에서 소유권을 가져온 개체에 대 한 포인터입니다 overwrite_buffer .A pointer to a message object that this overwrite_buffer has taken ownership of.

설명Remarks

이 메서드는의 현재 메시지를 overwrite_buffer 새로 허용 된 메시지로 덮어씁니다 _PMessage .This method overwrites the current message in the overwrite_buffer with the newly accepted message _PMessage.

send_messagesend_message

ISource블록에서이 메시징 블록으로 메시지를 동기적으로 전달 overwrite_buffer 합니다.Synchronously passes a message from an ISource block to this overwrite_buffer messaging block. send소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the send method, when called by a source block.

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

매개 변수Parameters

_PMessage_PMessage
message 개체에 대한 포인터입니다.A pointer to the message object.

_PSource_PSource
메시지를 제공 하는 소스 블록에 대 한 포인터입니다.A pointer to the source block offering the message.

Return ValueReturn Value

대상에서 메시지를 사용 하 여 수행 하기로 결정 한 내용을 나타내는 message_status 입니다.A message_status indication of what the target decided to do with the message.

supports_anonymous_sourcesupports_anonymous_source

supports_anonymous_source 메서드를 재정의하여 이 블록이 연결되지 않은 소스에서 제공하는 메시지를 수락할 수 있음을 나타냅니다.Overrides the supports_anonymous_source method to indicate that this block can accept messages offered to it by a source that is not linked.

virtual bool supports_anonymous_source();

Return ValueReturn Value

true 블록은 제공 된 메시지를 연기 하지 않기 때문입니다.true because the block does not postpone offered messages.

release_messagerelease_message

이전 메시지 예약을 해제 합니다.Releases a previous message reservation.

virtual void release_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity message 해제 되는 개체의입니다.The runtime_object_identity of the message object being released.

reserve_messagereserve_message

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

virtual bool reserve_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity message 예약 되는 개체의입니다.The runtime_object_identity of the message object being reserved.

Return ValueReturn Value

true 메시지가 성공적으로 예약 되었으면이 고, false 그렇지 않으면입니다.true if the message was successfully reserved, false otherwise.

설명Remarks

가 호출 된 후를 reserve 반환 하면 true 또는을 consume release 호출 하 여 메시지의 소유권을 가져오거나 해제 해야 합니다.After reserve is called, if it returns true, either consume or release must be called to either take or release ownership of the message.

resume_propagationresume_propagation

예약이 해제 된 후 전파를 다시 시작 합니다.Resumes propagation after a reservation has been released.

virtual void resume_propagation();

value

메시징 블록에 저장 되는 메시지의 현재 페이로드에 대 한 참조를 가져옵니다 overwrite_buffer .Gets a reference to the current payload of the message being stored in the overwrite_buffer messaging block.

T value();

Return ValueReturn Value

현재 저장 된 메시지의 페이로드입니다.The payload of the currently stored message.

설명Remarks

에 저장 된 값은 overwrite_buffer 이 메서드가 반환 된 후 즉시 변경 될 수 있습니다.The value stored in the overwrite_buffer could change immediately after this method returns. 이 메서드는에 현재 저장 된 메시지가 없는 경우 메시지가 도착할 때까지 대기 overwrite_buffer 합니다.This method will wait until a message arrives if no message is currently stored in the overwrite_buffer.

참고 항목See also

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