Compartir a través de


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.
~target_block Destructor 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 sincró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.
rechazar_mensajes_entrantes 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.
eliminar_fuentes 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.

rechazar_mensajes_entrantes

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.

habilitar_procesamiento_por_lotes

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
Un 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.

procesar_mensajes_de_entrada

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

propagar

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.

propagar_mensaje

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.

eliminar_fuentes

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 eliminar las fuentes en su destructor.

Enviar

Pasa de forma sincró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 send regresa, el mensaje ya ha sido aceptado y transferido al bloque de destino, o ha sido rechazado por el destino.

enviar_mensaje

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.

enviar_sincronizado

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

esperar_envíos_asincrónicos

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

espacio de nombres de concurrencia
ITarget (clase)