Compartilhar via


Classe propagator_block

A classe propagator_block é uma classe base abstrata para blocos de mensagens que são uma origem e um destino. Ela combina a funcionalidade das classes source_block e target_block.

Sintaxe

template<class _TargetLinkRegistry, class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _TargetLinkRegistry::type::type>>
class propagator_block : public source_block<_TargetLinkRegistry,
    _MessageProcessorType>,
public ITarget<typename _SourceLinkRegistry::type::source_type>;

Parâmetros

_TargetLinkRegistry
O registro de links a ser usado para armazenar os links de destino.

_SourceLinkRegistry
O registro de URLs a ser usado para armazenar os links de origem.

_MessageProcessorType
O tipo de processador para processamento de mensagens.

Membros

Typedefs públicos

Nome Descrição
source_iterator O tipo do iterador de source_link_manager para este propagator_block.

Construtores públicos

Nome Descrição
propagator_block Constrói um objeto propagator_block.
Destruidor ~propagator_block Destrói um objeto propagator_block.

Métodos públicos

Nome Descrição
propagate Passa uma mensagem de um bloco de origem de forma assíncrona para esse bloco de destino.
send Inicia uma mensagem de forma síncrona para esse bloco. Chamado por um bloco ISource. Quando essa função for concluída, a mensagem já terá se propagado dentro do bloco.

Métodos protegidos

Nome Descrição
recusar_mensagens_entrantes Indica ao bloco que novas mensagens devem ser recusadas.
inicializar_fonte_e_destino Inicializa o objeto base. Especificamente, o objeto message_processor precisa ser inicializado.
link_source Vincula um bloco de origem especificado a esse objeto propagator_block.
processar_mensagens_de_entrada Processa mensagens de entrada. Isso só é útil para blocos propagadores, que derivam de source_block (Substitui source_block::process_input_messages.)
propagate_message Quando substituído em uma classe derivada, esse método passa de forma assíncrona uma mensagem de um bloco de origem ISource para esse objeto propagator_block. Ele é invocado pelo método propagate, quando chamado por um bloco de origem.
register_filter Registra um método de filtro que será invocado em cada mensagem recebida.
remove_network_links Remove todos os links de rede de origem e de destino desse objeto propagator_block.
send_message Quando substituído em uma classe derivada, este método passa uma mensagem de um bloco ISource para este objeto propagator_block de forma síncrona. Ele é invocado pelo método send, quando chamado por um bloco de origem.
unlink_source Desvincula um bloco de origem especificado desse objeto propagator_block.
desvincular_fontes Desvincula todos os blocos de origem desse objeto propagator_block. (Sobrescreve ITarget::unlink_sources.)

Comentários

Para evitar várias heranças, a classe propagator_block herda da classe source_block e da classe abstrata ITarget. A maior parte da funcionalidade na classe target_block é replicada aqui.

Hierarquia de herança

ISource

ITarget

source_block

propagator_block

Requisitos

Cabeçalho: agents.h

Namespace: simultaneidade

recusar_mensagens_recebidas

Indica ao bloco que novas mensagens devem ser recusadas.

void decline_incoming_messages();

Comentários

Esse método é chamado pelo destruidor para garantir que novas mensagens sejam recusadas enquanto a destruição está em andamento.

inicializar_origem_e_destino

Inicializa o objeto base. Especificamente, o objeto message_processor precisa ser inicializado.

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

Parâmetros

_PScheduler
O agendador a ser usado para tarefas de agendamento.

_PScheduleGroup
O grupo de agendamento a ser usado para agendar tarefas.

Vincula um bloco de origem especificado a esse objeto propagator_block.

virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);

Parâmetros

_PSource
Um ponteiro para o bloco ISource que deve ser vinculado.

processar_mensagens_de_entrada

Processa mensagens de entrada. Isso só é útil para blocos propagadores que derivam de source_block

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

Parâmetros

_PMessage
Um ponteiro para a mensagem que deve ser processada.

propagar

Passa uma mensagem de um bloco de origem de forma assíncrona para esse bloco de destino.

virtual message_status propagate(
    _Inout_opt_ message<_Source_type>* _PMessage,
    _Inout_opt_ ISource<_Source_type>* _PSource);

Parâmetros

_PMessage
Um ponteiro para o message objeto.

_PSource
Um ponteiro para o bloco de origem que fornece a mensagem.

Valor de retorno

Uma indicação de message_status sobre o que o destino decidiu fazer com a mensagem.

Comentários

O método propagate é invocado em um bloco de destino por um bloco de origem vinculado. Ele enfileira uma tarefa assíncrona para lidar com a mensagem, caso não haja uma já na fila ou em execução.

O método lança uma exceção invalid_argument se os parâmetros _PMessage ou _PSource forem NULL.

propagate_message

Quando substituído em uma classe derivada, esse método passa de forma assíncrona uma mensagem de um bloco de origem ISource para esse objeto propagator_block. Ele é invocado pelo método propagate, quando chamado por um bloco de origem.

virtual message_status propagate_message(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource) = 0;

Parâmetros

_PMessage
Um ponteiro para o message objeto.

_PSource
Um ponteiro para o bloco de origem que fornece a mensagem.

Valor de retorno

Uma indicação de message_status sobre o que o destino decidiu fazer com a mensagem.

bloco_propagador

Constrói um objeto propagator_block.

propagator_block();

~propagator_block

Destrói um objeto propagator_block.

virtual ~propagator_block();

registrar_filtro

Registra um método de filtro que será invocado em cada mensagem recebida.

void register_filter(filter_method const& _Filter);

Parâmetros

_Filter
O método do filtro.

Remove todos os links de rede de origem e de destino desse objeto propagator_block.

void remove_network_links();

enviar

Inicia uma mensagem de forma síncrona para esse bloco. Chamado por um bloco ISource. Quando essa função for concluída, a mensagem já terá se propagado dentro do bloco.

virtual message_status send(
    _Inout_ message<_Source_type>* _PMessage,
    _Inout_ ISource<_Source_type>* _PSource);

Parâmetros

_PMessage
Um ponteiro para o message objeto.

_PSource
Um ponteiro para o bloco de origem que fornece a mensagem.

Valor de retorno

Uma indicação de message_status sobre o que o destino decidiu fazer com a mensagem.

Comentários

Esse método gera uma exceção invalid_argument se o parâmetro _PMessage ou _PSource for NULL.

enviar_mensagem

Quando substituído em uma classe derivada, este método passa uma mensagem de um bloco ISource para este objeto propagator_block de forma síncrona. Ele é invocado pelo método send, quando chamado por um bloco de origem.

virtual message_status send_message(
    _Inout_ message<_Source_type> *,
    _Inout_ ISource<_Source_type> *);

Valor de retorno

Uma indicação de message_status sobre o que o destino decidiu fazer com a mensagem.

Comentários

Por padrão, esse bloco retorna declined a menos que tenha sido substituído por uma classe derivada.

Desvincula um bloco de origem especificado desse objeto propagator_block.

virtual void unlink_source(_Inout_ ISource<_Source_type>* _PSource);

Parâmetros

_PSource
Um ponteiro para o bloco ISource que deve ser desvinculado.

Desvincula todos os blocos de origem desse objeto propagator_block.

virtual void unlink_sources();

Confira também

Namespace de concorrência
Classe source_block
Classe ITarget