Share 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 manter os links de destino.

_SourceLinkRegistry
O registro de links a ser usado para manter 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á propagado para o bloco.

Métodos protegidos

Nome Descrição
decline_incoming_messages Indica ao bloco que novas mensagens devem ser recusadas.
initialize_source_and_target 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.
process_input_messages 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, esse método passa de forma síncrona uma mensagem de um bloco de origem ISource para esse objeto propagator_block. 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.
unlink_sources Desvincula todos os blocos de origem desse objeto propagator_block. (Substitui 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: concurrency

decline_incoming_messages

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.

initialize_source_and_target

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 agendado a ser usado para tarefas de agendamento.

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.

process_input_messages

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.

propagate

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 oferece a mensagem.

Valor de Devolução

Uma indicação de message_status do 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, se ainda não estiver na fila ou em execução.

O método gera uma exceção invalid_argument se o parâmetro _PMessage ou _PSource for 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 oferece a mensagem.

Valor de Devolução

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

propagator_block

Constrói um objeto propagator_block.

propagator_block();

~propagator_block

Destrói um objeto propagator_block.

virtual ~propagator_block();

register_filter

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á propagado para o 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 oferece a mensagem.

Valor de Devolução

Uma indicação de message_status do 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.

send_message

Quando substituído em uma classe derivada, esse método passa de forma síncrona uma mensagem de um bloco de origem ISource para esse objeto propagator_block. 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 Devolução

Uma indicação de message_status do 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 simultaneidade
Classe source_block
Classe ITarget