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
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.
link_source
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 retorno
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 retorno
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_network_links
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 retorno
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 retorno
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.
unlink_source
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.
unlink_sources
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