Compartilhar via


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

ITarget

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.

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();

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.

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.

Confira também

Namespace de simultaneidade
Classe ITarget