Classe target_block
A classe target_block
é uma classe base abstrata que fornece funcionalidade básica de gerenciamento de link e verificação de erros para blocos apenas de destino.
Sintaxe
template<class _SourceLinkRegistry, class _MessageProcessorType = ordered_message_processor<typename _SourceLinkRegistry::type::source_type>>
class target_block : public ITarget<typename _SourceLinkRegistry::type::source_type>;
Parâmetros
_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 objeto target_block . |
Construtores públicos
Nome | Descrição |
---|---|
target_block | Constrói um objeto target_block . |
~target_block Destructor | Destrói o objeto target_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 | Passa uma mensagem de um bloco de origem de forma síncrona para esse bloco de destino. |
Métodos protegidos
Nome | Descrição |
---|---|
async_send | Envia uma mensagem de forma assíncrona para processamento. |
decline_incoming_messages | Indica ao bloco que novas mensagens devem ser recusadas. |
enable_batched_processing | Habilita o processamento em lote para esse bloco. |
initialize_target | Inicializa o objeto base. Especificamente, o objeto message_processor precisa ser inicializado. |
link_source | Vincula um bloco de origem especificado a esse objeto target_block . |
process_input_messages | Processa mensagens recebidas como entradas. |
process_message | Quando substituído em uma classe derivada, processa uma mensagem que foi aceita por esse objeto target_block . |
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 target_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_sources | Desvincula todas as fontes depois de aguardar a conclusão de operações de envio assíncronas pendentes. |
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 target_block . Ele é invocado pelo método send , quando chamado por um bloco de origem. |
sync_send | Envia uma mensagem de forma síncrona para processamento. |
unlink_source | Desvincula um bloco de origem especificado desse objeto target_block . |
unlink_sources | Desvincula todos os blocos de origem desse objeto target_block . (Substitui ITarget::unlink_sources.) |
wait_for_async_sends | Aguarda a conclusão de todas as propagações assíncronas. |
Hierarquia de herança
target_block
Requisitos
Cabeçalho: agents.h
Namespace: concurrency
async_send
Envia uma mensagem de forma assíncrona para processamento.
void async_send(_Inout_opt_ message<_Source_type>* _PMessage);
Parâmetros
_PMessage
Um ponteiro para a mensagem que está sendo enviada.
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.
enable_batched_processing
Habilita o processamento em lote para esse bloco.
void enable_batched_processing();
initialize_target
Inicializa o objeto base. Especificamente, o objeto message_processor
precisa ser inicializado.
void initialize_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 target_block
.
virtual void link_source(_Inout_ ISource<_Source_type>* _PSource);
Parâmetros
_PSource
Um ponteiro para o bloco ISource
que deve ser vinculado.
Comentários
Essa função não deve ser chamada diretamente em um objeto target_block
. Os blocos devem ser conectados juntos usando o método link_target
em blocos ISource
, o que invocará o método link_source
no destino correspondente.
process_input_messages
Processa mensagens recebidas como entradas.
virtual void process_input_messages(_Inout_ message<_Source_type>* _PMessage);
Parâmetros
_PMessage
Um ponteiro para a mensagem que deve ser processada.
process_message
Quando substituído em uma classe derivada, processa uma mensagem que foi aceita por esse objeto target_block
.
virtual void process_message(message<_Source_type> *);
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 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 target_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.
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_sources
Desvincula todas as fontes depois de aguardar a conclusão de operações de envio assíncronas pendentes.
void remove_sources();
Comentários
Todos os blocos de destino devem chamar essa rotina para remover as fontes em seu destruidor.
Enviar
Passa uma mensagem de um bloco de origem de forma síncrona para esse bloco de destino.
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
O método gera uma exceção invalid_argument se o parâmetro _PMessage
ou _PSource
for NULL
.
Usar o método send
fora do início da mensagem e propagar mensagens em uma rede é perigoso e pode levar a deadlock.
Quando retorna send
, a mensagem já foi aceita e transferida para o bloco de destino, ou foi recusada pelo destino.
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 target_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.
sync_send
Envia uma mensagem de forma síncrona para processamento.
void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);
Parâmetros
_PMessage
Um ponteiro para a mensagem que está sendo enviada.
target_block
Constrói um objeto target_block
.
target_block();
~target_block
Destrói o objeto target_block
.
virtual ~target_block();
unlink_source
Desvincula um bloco de origem especificado desse objeto target_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 target_block
.
virtual void unlink_sources();
wait_for_async_sends
Aguarda a conclusão de todas as propagações assíncronas.
void wait_for_async_sends();
Comentários
Esse método é usado por destruidores de bloco de mensagens para garantir que todas as operações assíncronas tenham tido tempo para serem concluídas antes de destruir o bloco.