unbounded_buffer 클래스unbounded_buffer Class

unbounded_buffer 메시징 블록은 메시지를 개수에 제한 없이 저장할 수 있는, 순서가 지정된 다중 대상 다중 소스 propagator_block입니다.An unbounded_buffer messaging block is a multi-target, multi-source, ordered propagator_block capable of storing an unbounded number of messages.

구문Syntax

template<
   class             _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget<            _Type>>, multi_link_registry<ISource<            _Type>>>;

매개 변수Parameters

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

멤버Members

Public 생성자Public Constructors

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

Public 메서드Public Methods

이름Name 설명Description
나오는dequeue 메시지 블록에서 항목을 제거 unbounded_buffer 합니다.Removes an item from the unbounded_buffer messaging block.
큐에 넣기(enqueue)enqueue 메시지 블록에 항목을 추가 unbounded_buffer 합니다.Adds an item to the unbounded_buffer messaging block.

Protected 메서드Protected Methods

NameName 설명Description
accept_messageaccept_message unbounded_buffer호출자에 게 소유권을 전송 하는이 메시징 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this unbounded_buffer messaging block, transferring ownership to the caller.
consume_messageconsume_message 메시징 블록에서 이전에 제공 하 고 대상에 의해 예약 된 메시지를 사용 하 여 unbounded_buffer 호출자에 게 소유권을 전송 합니다.Consumes a message previously offered by the unbounded_buffer messaging block and reserved by the target, transferring ownership to the caller.
link_target_notificationlink_target_notification 새 대상이이 메시징 블록에 연결 되었음을 알리는 콜백입니다 unbounded_buffer .A callback that notifies that a new target has been linked to this unbounded_buffer messaging block.
process_input_messagesprocess_input_messages message _PMessage 이 메시징 블록에 배치 하 unbounded_buffer 고 연결 된 모든 대상에 제공 하려고 합니다.Places the message _PMessage in this unbounded_buffer messaging block and tries to offer it to all of the linked targets.
propagate_messagepropagate_message ISource블록에서이 메시징 블록으로 메시지를 비동기적으로 전달 unbounded_buffer 합니다.Asynchronously passes a message from an ISource block to this unbounded_buffer messaging block. propagate소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the propagate method, when called by a source block.
propagate_output_messagespropagate_output_messages message _PMessage 이 메시징 블록에 배치 하 unbounded_buffer 고 연결 된 모든 대상에 제공 하려고 합니다.Places the message _PMessage in this unbounded_buffer messaging block and tries to offer it to all of the linked targets. Source_block::p ropagate_output_messages를 재정의 합니다.(Overrides source_block::propagate_output_messages.)
release_messagerelease_message 이전 메시지 예약을 해제 합니다.Releases a previous message reservation. Source_block:: release_message를 재정의 합니다.(Overrides source_block::release_message.)
reserve_messagereserve_message 이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 unbounded_buffer 합니다.Reserves a message previously offered by this unbounded_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블록에서이 메시징 블록으로 메시지를 동기적으로 전달 unbounded_buffer 합니다.Synchronously passes a message from an ISource block to this unbounded_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.)

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

상속 계층 구조Inheritance Hierarchy

ISourceISource

ITargetITarget

source_blocksource_block

propagator_blockpropagator_block

unbounded_buffer

요구 사항Requirements

헤더: agents.hHeader: agents.h

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

accept_messageaccept_message

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

virtual message<_Type> * 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.

consume_messageconsume_message

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

virtual message<_Type> * 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.

나오는dequeue

메시지 블록에서 항목을 제거 unbounded_buffer 합니다.Removes an item from the unbounded_buffer messaging block.

_Type dequeue();

Return ValueReturn Value

에서 제거 되는 메시지의 페이로드 unbounded_buffer 입니다.The payload of the message removed from the unbounded_buffer.

스케줄러enqueue

메시지 블록에 항목을 추가 unbounded_buffer 합니다.Adds an item to the unbounded_buffer messaging block.

bool enqueue(
   _Type const&                 _Item
);

매개 변수Parameters

_Item_Item
추가할 항목입니다.The item to add.

Return ValueReturn Value

true 항목이 수락 되었으면이 고, false 그렇지 않으면입니다.true if the item was accepted, false otherwise.

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

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

매개 변수Parameters

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

propagate_messagepropagate_message

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

virtual message_status propagate_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_Type> *                 _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_output_messagespropagate_output_messages

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

virtual void propagate_output_messages();

설명Remarks

다른 메시지가에 이미 있는 경우에는 unbounded_buffer 이전 메시지를 수락 하거나 사용 하기 전에는 연결 된 대상으로의 전파가 발생 하지 않습니다.If another message is already ahead of this one in the unbounded_buffer, propagation to linked targets will not occur until any earlier messages have been accepted or consumed. 성공적으로 연결 된 첫 번째 대상 accept 또는 consume 메시지는 소유권을 가지 며 다른 대상이 메시지를 가져올 수 없습니다.The first linked target to successfully accept or consume the message takes ownership, and no other target can then get the message.

process_input_messagesprocess_input_messages

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

virtual void process_input_messages(
   _Inout_ message<_Type> *                 _PMessage
);

매개 변수Parameters

_PMessage_PMessage
처리할 메시지에 대 한 포인터입니다.A pointer to the message that is to be processed.

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

이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 unbounded_buffer 합니다.Reserves a message previously offered by this unbounded_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();

send_messagesend_message

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

virtual message_status send_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_Type> *                 _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.

unbounded_bufferunbounded_buffer

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

unbounded_buffer();

unbounded_buffer(
   filter_method const&                 _Filter
);

unbounded_buffer(
   Scheduler&                 _PScheduler
);

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

unbounded_buffer(
   ScheduleGroup&                 _PScheduleGroup
);

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

매개 변수Parameters

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

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

_PScheduleGroup_PScheduleGroup
ScheduleGroup 메시징 블록의 전파 작업이 예약되는 unbounded_buffer 개체입니다.The ScheduleGroup object within which the propagation task for the unbounded_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 (_Type const &) 제공 된 메시지를 unbounded_buffer 수락 해야 하는지 여부를 확인 하기 위해이 메시징 블록에 의해 호출 되는 시그니처가 포함 된 함수입니다.The type filter_method is a functor with signature bool (_Type const &) which is invoked by this unbounded_buffer messaging block to determine whether or not it should accept an offered message.

~ unbounded_buffer~unbounded_buffer

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

~unbounded_buffer();

참고 항목See also

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