Share via


target_block (Clase)

La clase target_block es una clase base abstracta que proporciona funcionalidad de administración de vínculo básica y comprueba errores solo para bloques de destino.

Sintaxis

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
Registro de vínculos que se usará para contener los vínculos de origen.

_MessageProcessorType
Tipo de procesador para el procesamiento de mensajes.

Miembros

Definiciones de tipos públicas

Nombre Descripción
source_iterator El tipo del iterador de source_link_manager para este objeto target_block.

Constructores públicos

Nombre Descripción
target_block Construye un objeto target_block.
Destructor ~target_block Destruye el objeto target_block.

Métodos públicos

Nombre Descripción
propagate Pasa de forma asincrónica un mensaje de un bloque de origen a este bloque de destino.
send Pasa de forma asincrónica un mensaje de un bloque de origen a este bloque de destino.

Métodos protegidos

Nombre Descripción
async_send Envía de forma asincrónica un mensaje para su procesamiento.
decline_incoming_messages Indica al bloque que se deben rechazar los nuevos mensajes.
enable_batched_processing Habilita el procesamiento por lotes para este bloque.
initialize_target Inicializa el objeto base. Concretamente, se tiene que inicializar el objeto message_processor.
link_source Vincula un bloque de origen especificado a este objeto target_block.
process_input_messages Procesa los mensajes que se reciben como entradas.
process_message Cuando se invalida en una clase derivada, procesa un mensaje aceptado por este objeto target_block.
propagate_message Cuando se invalida en una clase derivada, este método pasa de manera asincrónica un mensaje de un bloque ISource a este objeto target_block. Se invoca mediante el propagate método, cuando lo llama un bloque de origen.
register_filter Registra un método de filtro que se invocará en cada mensaje recibido.
remove_sources Desvincula todos los orígenes después de esperar a que finalicen las operaciones de envío asincrónicas pendientes.
send_message Cuando se invalida en una clase derivada, este método pasa de manera sincrónica un mensaje de un bloque ISource a este objeto target_block. Se invoca mediante el send método, cuando lo llama un bloque de origen.
sync_send Envía de forma sincrónica un mensaje para su procesamiento.
unlink_source Desvincula un bloque de origen especificado de este objeto target_block.
unlink_sources Desvincula todos los bloques de origen de este objeto target_block. (Invalida ITarget::unlink_sources.)
wait_for_async_sends Espera a que se completen todas las propagaciones asincrónicas.

Jerarquía de herencia

ITarget

target_block

Requisitos

Encabezado: agents.h

Espacio de nombres: simultaneidad

async_send

Envía de forma asincrónica un mensaje para su procesamiento.

void async_send(_Inout_opt_ message<_Source_type>* _PMessage);

Parámetros

_PMessage
Un puntero al mensaje que se envía.

decline_incoming_messages

Indica al bloque que se deben rechazar los nuevos mensajes.

void decline_incoming_messages();

Comentarios

El destructor llama a este método para asegurarse de que se rechazan los nuevos mensajes mientras la destrucción está en curso.

enable_batched_processing

Habilita el procesamiento por lotes para este bloque.

void enable_batched_processing();

initialize_target

Inicializa el objeto base. Concretamente, se tiene que inicializar el objeto message_processor.

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

Parámetros

_PScheduler
El programador que se usará para programar tareas.

_PScheduleGroup
El grupo de programación que se usará para programar tareas.

Vincula un bloque de origen especificado a este objeto target_block.

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

Parámetros

_PSource
Puntero al bloque ISource que se va a vincular.

Comentarios

No se debe llamar directamente a esta función en un objeto target_block. Los bloques se deben conectar juntos con el método link_target en los bloques ISource, lo que invocará al método link_source en el destino correspondiente.

process_input_messages

Procesa los mensajes que se reciben como entradas.

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

Parámetros

_PMessage
Un puntero al mensaje que se procesará.

process_message

Cuando se invalida en una clase derivada, procesa un mensaje aceptado por este objeto target_block.

virtual void process_message(message<_Source_type> *);

propagate

Pasa de forma asincrónica un mensaje de un bloque de origen a este bloque de destino.

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

Parámetros

_PMessage
Un puntero al objeto message.

_PSource
Puntero al bloque de origen que ofrece el mensaje.

Valor devuelto

Una indicación message_status de lo que el destino decidió hacer con el mensaje.

Comentarios

El método genera una excepción invalid_argument si el parámetro _PMessage o el parámetro _PSource es NULL.

propagate_message

Cuando se invalida en una clase derivada, este método pasa de manera asincrónica un mensaje de un bloque ISource a este objeto target_block. Se invoca mediante el propagate método, cuando lo llama un bloque de origen.

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

Parámetros

_PMessage
Un puntero al objeto message.

_PSource
Puntero al bloque de origen que ofrece el mensaje.

Valor devuelto

Una indicación message_status de lo que el destino decidió hacer con el mensaje.

register_filter

Registra un método de filtro que se invocará en cada mensaje recibido.

void register_filter(filter_method const& _Filter);

Parámetros

_Filter
Método de filtro.

remove_sources

Desvincula todos los orígenes después de esperar a que finalicen las operaciones de envío asincrónicas pendientes.

void remove_sources();

Comentarios

Todos los bloques de destino deben llamar a esta rutina para quitar los orígenes de su destructor.

Enviar

Pasa de forma asincrónica un mensaje de un bloque de origen a este bloque de destino.

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

Parámetros

_PMessage
Un puntero al objeto message.

_PSource
Puntero al bloque de origen que ofrece el mensaje.

Valor devuelto

Una indicación message_status de lo que el destino decidió hacer con el mensaje.

Comentarios

El método genera una excepción invalid_argument si el parámetro _PMessage o el parámetro _PSource es NULL.

Usar el método send fuera de la iniciación del mensaje y para propagar mensajes dentro de una red es peligroso y puede generar un interbloqueo.

Cuando se devuelve send, ya se aceptó el mensaje y se transfirió al bloque de destino, o bien el destino ya lo rechazó.

send_message

Cuando se invalida en una clase derivada, este método pasa de manera sincrónica un mensaje de un bloque ISource a este objeto target_block. Se invoca mediante el send método, cuando lo llama un bloque de origen.

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

Valor devuelto

Una indicación message_status de lo que el destino decidió hacer con el mensaje.

Comentarios

De forma predeterminada, este bloque devuelve declined a menos que se invalide mediante una clase derivada.

sync_send

Envía de forma sincrónica un mensaje para su procesamiento.

void sync_send(_Inout_opt_ message<_Source_type>* _PMessage);

Parámetros

_PMessage
Un puntero al mensaje que se envía.

target_block

Construye un objeto target_block.

target_block();

~target_block

Destruye el objeto target_block.

virtual ~target_block();

Desvincula un bloque de origen especificado de este objeto target_block.

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

Parámetros

_PSource
Puntero al bloque ISource que se va a desvincular.

Desvincula todos los bloques de origen de este objeto target_block.

virtual void unlink_sources();

wait_for_async_sends

Espera a que se completen todas las propagaciones asincrónicas.

void wait_for_async_sends();

Comentarios

Los destructores de bloque de mensajes usan este método para asegurarse de que todas las operaciones asincrónicas han tenido tiempo de finalizar antes de destruir el bloque.

Consulte también

concurrency (espacio de nombres)
ITarget (clase)