source_block 클래스source_block Class

source_block 클래스는 소스 전용 블록에 대한 추상 기본 클래스입니다.The source_block class is an abstract base class for source-only blocks. 이 클래스는 기본 링크 관리 기능 및 일반적인 오류 검사를 제공합니다.The class provides basic link management functionality as well as common error checks.

구문Syntax

template<class _TargetLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class source_block : public ISource<typename _TargetLinkRegistry::type::type>;

매개 변수Parameters

_TargetLinkRegistry_TargetLinkRegistry
대상 링크를 보유 하는 데 사용할 링크 레지스트리Link registry to be used for holding the target links.

_MessageProcessorType_MessageProcessorType
메시지 처리를 위한 프로세서 유형입니다.Processor type for message processing.

멤버Members

공용 TypedefsPublic Typedefs

NameName 설명Description
target_iterator 연결 된 대상을 탐색 하는 반복기입니다.The iterator to walk the connected targets.

Public 생성자Public Constructors

NameName 설명Description
source_blocksource_block source_block 개체를 생성합니다.Constructs a source_block object.
~ source_block 소멸자~source_block Destructor 개체를 소멸 시킵니다 source_block .Destroys the source_block object.

Public 메서드Public Methods

이름Name 설명Description
수락할accept 이 개체가 제공한 메시지를 수락 하 여 source_block 호출자에 게 소유권을 전송 합니다.Accepts a message that was offered by this source_block object, transferring ownership to the caller.
acquire_refacquire_ref 삭제를 방지 하기 위해이 개체의 참조 횟수를 가져옵니다 source_block .Acquires a reference count on this source_block object, to prevent deletion.
활용consume 이 개체에서 이전에 제공한 메시지를 사용 하 source_block 고 대상에 의해 성공적으로 예약 되어 호출자에 게 소유권을 양도 합니다.Consumes a message previously offered by this source_block object and successfully reserved by the target, transferring ownership to the caller.
link_targetlink_target 대상 블록을이 개체에 연결 source_block 합니다.Links a target block to this source_block object.
릴리스release 이전의 성공적인 메시지 예약을 해제 합니다.Releases a previous successful message reservation.
release_refrelease_ref 이 개체에 대 한 참조 횟수를 해제 source_block 합니다.Releases a reference count on this source_block object.
두기reserve 이 개체에서 이전에 제공한 메시지를 예약 source_block 합니다.Reserves a message previously offered by this source_block object.
unlink_targetunlink_target 이 개체에서 대상 블록을 해제 source_block 합니다.Unlinks a target block from this source_block object.
unlink_targetsunlink_targets 이 개체에서 모든 대상 블록을 해제 source_block 합니다.Unlinks all target blocks from this source_block object. ( ISource:: unlink_targets을 재정의 합니다.)(Overrides ISource::unlink_targets.)

Protected 메서드Protected Methods

NameName 설명Description
accept_messageaccept_message 파생 클래스에서 재정의 되는 경우 소스에서 제공 된 메시지를 수락 합니다.When overridden in a derived class, accepts an offered message by the source. 메시지 블록은의 유효성을 검사 하 _MsgId 고 메시지를 반환 하려면이 메서드를 재정의 해야 합니다.Message blocks should override this method to validate the _MsgId and return a message.
async_sendasync_send 비동기 방식으로 메시지를 큐에 대기 시키고 아직 수행 되지 않은 경우 전파 작업을 시작 합니다.Asynchronously queues up messages and starts a propagation task, if this has not been done already
consume_messageconsume_message 파생 클래스에서 재정의 되는 경우 이전에 예약 된 메시지를 사용 합니다.When overridden in a derived class, consumes a message that was previously reserved.
enable_batched_processingenable_batched_processing 이 블록에 대한 일괄 처리를 할 수 있도록 합니다.Enables batched processing for this block.
initialize_sourceinitialize_source message_propagator이 내에서를 초기화 합니다 source_block .Initializes the message_propagator within this source_block.
link_target_notificationlink_target_notification 새 대상이이 개체에 연결 되었음을 알리는 콜백입니다 source_block .A callback that notifies that a new target has been linked to this source_block object.
process_input_messagesprocess_input_messages 입력된 메시지를 처리합니다.Process input messages. source_block에서 파생되는 전파자 블록에만 유용합니다.This is only useful for propagator blocks, which derive from source_block
propagate_output_messagespropagate_output_messages 메시지를 대상으로 전파합니다.Propagate messages to targets.
propagate_to_any_targetspropagate_to_any_targets 파생 클래스에서 재정의 되는 경우 지정 된 메시지를 연결 된 대상 중 하나 또는 모두에 전파 합니다.When overridden in a derived class, propagates the given message to any or all of the linked targets. 메시지 블록에 대 한 주요 전파 루틴입니다.This is the main propagation routine for message blocks.
release_messagerelease_message 파생 클래스에서 재정의 되는 경우 이전 메시지 예약을 해제 합니다.When overridden in a derived class, releases a previous message reservation.
remove_targetsremove_targets 이 소스 블록의 모든 대상 링크를 제거 합니다.Removes all target links for this source block. 이를 소멸자에서 호출 해야 합니다.This should be called from the destructor.
reserve_messagereserve_message 파생 클래스에서 재정의 되는 경우이 개체에서 이전에 제공 된 메시지를 예약 source_block 합니다.When overridden in a derived class, reserves a message previously offered by this source_block object.
resume_propagationresume_propagation 파생 클래스에서 재정의 된 경우 예약이 해제 된 후 전파를 다시 시작 합니다.When overridden in a derived class, resumes propagation after a reservation has been released.
sync_sendsync_send 아직 수행 하지 않은 경우 메시지를 동기적으로 큐에 대기 시키고 전파 작업을 시작 합니다.Synchronously queues up messages and starts a propagation task, if this has not been done already.
unlink_target_notificationunlink_target_notification 대상의 연결이이 개체에서 해제 되었음을 알리는 콜백입니다 source_block .A callback that notifies that a target has been unlinked from this source_block object.
wait_for_outstanding_async_sendswait_for_outstanding_async_sends 모든 비동기 전파 완료 될 때까지 기다립니다.Waits for all asynchronous propagations to complete. 이 전파자 특정 spin wait는 메시지 블록의 소멸자에 사용 되어 모든 비동기 전파가 블록을 제거 하기 전에 완료할 시간이 있는지 확인 합니다.This propagator-specific spin wait is used in destructors of message blocks to make sure that all asynchronous propagations have time to finish before destroying the block.

설명Remarks

메시지 블록은이 클래스에서 제공 하는 링크 관리 및 동기화를 활용 하기 위해이 블록에서 파생 되어야 합니다.Message blocks should derive from this block to take advantage of link management and synchronization provided by this class.

상속 계층 구조Inheritance Hierarchy

ISourceISource

source_block

요구 사항Requirements

헤더: agents.hHeader: agents.h

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

수락할accept

이 개체가 제공한 메시지를 수락 하 여 source_block 호출자에 게 소유권을 전송 합니다.Accepts a message that was offered by this source_block object, transferring ownership to the caller.

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

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

설명Remarks

매개 변수가 인 경우 메서드는 invalid_argument 예외를 throw 합니다 _PTarget NULL .The method throws an invalid_argument exception if the parameter _PTarget is NULL.

accept이 블록에서 메시지를 제공 하는 동안 대상에서 메서드를 호출 합니다 ISource .The accept method is called by a target while a message is being offered by this ISource block. propagate ITarget 이 소스가 메시지의 복사본을 만들도록 결정 한 경우 반환 되는 메시지 포인터는 블록의 메서드에 전달 된 것과 다를 수 있습니다.The message pointer returned may be different from the one passed into the propagate method of the ITarget block, if this source decides to make a copy of the message.

accept_messageaccept_message

파생 클래스에서 재정의 되는 경우 소스에서 제공 된 메시지를 수락 합니다.When overridden in a derived class, accepts an offered message by the source. 메시지 블록은의 유효성을 검사 하 _MsgId 고 메시지를 반환 하려면이 메서드를 재정의 해야 합니다.Message blocks should override this method to validate the _MsgId and return a message.

virtual message<_Target_type>* accept_message(runtime_object_identity _MsgId) = 0;

매개 변수Parameters

_MsgId_MsgId
개체의 런타임 개체 id message 입니다.The runtime object identity of the message object.

Return ValueReturn Value

호출자에 게 소유권이 있는 메시지에 대 한 포인터입니다.A pointer to the message that the caller now has ownership of.

설명Remarks

소유권을 이전 하려면 원래 메시지 포인터가 반환 되어야 합니다.To transfer ownership, the original message pointer should be returned. 소유권을 유지 하려면 메시지 페이로드의 복사본을 만들고 반환 해야 합니다.To maintain ownership, a copy of message payload needs to be made and returned.

acquire_refacquire_ref

삭제를 방지 하기 위해이 개체의 참조 횟수를 가져옵니다 source_block .Acquires a reference count on this source_block object, to prevent deletion.

virtual void acquire_ref(_Inout_ ITarget<_Target_type> *);

설명Remarks

이 메서드는 메서드를 실행 하는 ITarget 동안이 소스에 연결 되는 개체에 의해 호출 됩니다 link_target .This method is called by an ITarget object that is being linked to this source during the link_target method.

async_sendasync_send

비동기 방식으로 메시지를 큐에 대기 시키고 아직 수행 되지 않은 경우 전파 작업을 시작 합니다.Asynchronously queues up messages and starts a propagation task, if this has not been done already

virtual void async_send(_Inout_opt_ message<_Target_type>* _Msg);

매개 변수Parameters

_Msg_Msg
message비동기적으로 보낼 개체에 대 한 포인터입니다.A pointer to a message object to asynchronously send.

활용consume

이 개체에서 이전에 제공한 메시지를 사용 하 source_block 고 대상에 의해 성공적으로 예약 되어 호출자에 게 소유권을 양도 합니다.Consumes a message previously offered by this source_block object and successfully reserved by the target, transferring ownership to the caller.

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

매개 변수가 인 경우 메서드는 invalid_argument 예외를 throw 합니다 _PTarget NULL .The method throws an invalid_argument exception if the parameter _PTarget is NULL.

매개 변수가 bad_target _PTarget 호출 된 대상을 나타내지 않는 경우 메서드는 bad_target 예외를 throw 합니다 reserve .The method throws a bad_target exception if the parameter _PTarget does not represent the target that called reserve.

consume메서드는와 유사 accept 하지만 항상 reserve 반환 되는를 호출 해야 합니다 true .The consume method is similar to accept, but must always be preceded by a call to reserve that returned true.

consume_messageconsume_message

파생 클래스에서 재정의 되는 경우 이전에 예약 된 메시지를 사용 합니다.When overridden in a derived class, consumes a message that was previously reserved.

virtual message<_Target_type>* consume_message(runtime_object_identity _MsgId) = 0;

매개 변수Parameters

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

Return ValueReturn Value

호출자에 게 소유권이 있는 메시지에 대 한 포인터입니다.A pointer to the message that the caller now has ownership of.

설명Remarks

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

enable_batched_processingenable_batched_processing

이 블록에 대한 일괄 처리를 할 수 있도록 합니다.Enables batched processing for this block.

void enable_batched_processing();

initialize_sourceinitialize_source

message_propagator이 내에서를 초기화 합니다 source_block .Initializes the message_propagator within this source_block.

void initialize_source(
    _Inout_opt_ Scheduler* _PScheduler = NULL,
    _Inout_opt_ ScheduleGroup* _PScheduleGroup = NULL);

매개 변수Parameters

_PScheduler_PScheduler
작업을 예약 하는 데 사용할 스케줄러입니다.The scheduler to be used for scheduling tasks.

_PScheduleGroup_PScheduleGroup
작업을 예약 하는 데 사용할 일정 그룹입니다.The schedule group to be used for scheduling tasks.

대상 블록을이 개체에 연결 source_block 합니다.Links a target block to this source_block object.

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

매개 변수Parameters

_PTarget_PTarget
ITarget이 개체에 연결할 블록에 대 한 포인터 source_block 입니다.A pointer to an ITarget block to link to this source_block object.

설명Remarks

매개 변수가 인 경우 메서드는 invalid_argument 예외를 throw 합니다 _PTarget NULL .The method throws an invalid_argument exception if the parameter _PTarget is NULL.

새 대상이이 개체에 연결 되었음을 알리는 콜백입니다 source_block .A callback that notifies that a new target has been linked to this source_block object.

virtual void link_target_notification(_Inout_ ITarget<_Target_type> *);

process_input_messagesprocess_input_messages

입력된 메시지를 처리합니다.Process input messages. source_block에서 파생되는 전파자 블록에만 유용합니다.This is only useful for propagator blocks, which derive from source_block

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

매개 변수Parameters

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

propagate_output_messagespropagate_output_messages

메시지를 대상으로 전파합니다.Propagate messages to targets.

virtual void propagate_output_messages();

propagate_to_any_targetspropagate_to_any_targets

파생 클래스에서 재정의 되는 경우 지정 된 메시지를 연결 된 대상 중 하나 또는 모두에 전파 합니다.When overridden in a derived class, propagates the given message to any or all of the linked targets. 메시지 블록에 대 한 주요 전파 루틴입니다.This is the main propagation routine for message blocks.

virtual void propagate_to_any_targets(_Inout_opt_ message<_Target_type>* _PMessage);

매개 변수Parameters

_PMessage_PMessage
전파할 메시지에 대 한 포인터입니다.A pointer to the message that is to be propagated.

릴리스release

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

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

매개 변수Parameters

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

_PTarget_PTarget
메서드를 호출 하는 대상 블록에 대 한 포인터입니다 release .A pointer to the target block that is calling the release method.

설명Remarks

매개 변수가 인 경우 메서드는 invalid_argument 예외를 throw 합니다 _PTarget NULL .The method throws an invalid_argument exception if the parameter _PTarget is NULL.

매개 변수가 bad_target _PTarget 호출 된 대상을 나타내지 않는 경우 메서드는 bad_target 예외를 throw 합니다 reserve .The method throws a bad_target exception if the parameter _PTarget does not represent the target that called reserve.

release_messagerelease_message

파생 클래스에서 재정의 되는 경우 이전 메시지 예약을 해제 합니다.When overridden in a derived class, releases a previous message reservation.

virtual void release_message(runtime_object_identity _MsgId) = 0;

매개 변수Parameters

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

release_refrelease_ref

이 개체에 대 한 참조 횟수를 해제 source_block 합니다.Releases a reference count on this source_block object.

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

remove_targetsremove_targets

이 소스 블록의 모든 대상 링크를 제거 합니다.Removes all target links for this source block. 이를 소멸자에서 호출 해야 합니다.This should be called from the destructor.

void remove_targets();

두기reserve

이 개체에서 이전에 제공한 메시지를 예약 source_block 합니다.Reserves a message previously offered by this source_block object.

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

매개 변수Parameters

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

_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

매개 변수가 인 경우 메서드는 invalid_argument 예외를 throw 합니다 _PTarget NULL .The method throws an invalid_argument exception if the parameter _PTarget is NULL.

를 호출한 후에 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.

reserve_messagereserve_message

파생 클래스에서 재정의 되는 경우이 개체에서 이전에 제공 된 메시지를 예약 source_block 합니다.When overridden in a derived class, reserves a message previously offered by this source_block object.

virtual bool reserve_message(runtime_object_identity _MsgId) = 0;

매개 변수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

파생 클래스에서 재정의 된 경우 예약이 해제 된 후 전파를 다시 시작 합니다.When overridden in a derived class, resumes propagation after a reservation has been released.

virtual void resume_propagation() = 0;

source_blocksource_block

source_block 개체를 생성합니다.Constructs a source_block object.

source_block();

~ source_block~source_block

개체를 소멸 시킵니다 source_block .Destroys the source_block object.

virtual ~source_block();

sync_sendsync_send

아직 수행 하지 않은 경우 메시지를 동기적으로 큐에 대기 시키고 전파 작업을 시작 합니다.Synchronously queues up messages and starts a propagation task, if this has not been done already.

virtual void sync_send(_Inout_opt_ message<_Target_type>* _Msg);

매개 변수Parameters

_Msg_Msg
message동기적으로 보낼 개체에 대 한 포인터입니다.A pointer to a message object to synchronously send.

이 개체에서 대상 블록을 해제 source_block 합니다.Unlinks a target block from this source_block object.

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

매개 변수Parameters

_PTarget_PTarget
ITarget이 개체에서 연결을 해제할 블록에 대 한 포인터 source_block 입니다.A pointer to an ITarget block to unlink from this source_block object.

설명Remarks

매개 변수가 인 경우 메서드는 invalid_argument 예외를 throw 합니다 _PTarget NULL .The method throws an invalid_argument exception if the parameter _PTarget is NULL.

대상의 연결이이 개체에서 해제 되었음을 알리는 콜백입니다 source_block .A callback that notifies that a target has been unlinked from this source_block object.

virtual void unlink_target_notification(_Inout_ ITarget<_Target_type>* _PTarget);

매개 변수Parameters

_PTarget_PTarget
연결이 해제 된 ITarget 블록입니다.The ITarget block that was unlinked.

이 개체에서 모든 대상 블록을 해제 source_block 합니다.Unlinks all target blocks from this source_block object.

virtual void unlink_targets();

wait_for_outstanding_async_sendswait_for_outstanding_async_sends

모든 비동기 전파 완료 될 때까지 기다립니다.Waits for all asynchronous propagations to complete. 이 전파자 특정 spin wait는 메시지 블록의 소멸자에 사용 되어 모든 비동기 전파가 블록을 제거 하기 전에 완료할 시간이 있는지 확인 합니다.This propagator-specific spin wait is used in destructors of message blocks to make sure that all asynchronous propagations have time to finish before destroying the block.

void wait_for_outstanding_async_sends();

참고 항목See also

concurrency 네임 스페이스concurrency Namespace
ISource 클래스ISource Class