Compartir por


propagator_block (Clase)

La clase propagator_block es una clase base abstracta para los bloques de mensaje que son un bloque de origen y de destino. Combina la funcionalidad de las clases source_block y target_block.

Sintaxis

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

_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 Tipo del iterador de source_link_manager para este objeto propagator_block.

Constructores públicos

Nombre Descripción
propagator_block Construye un objeto propagator_block.
Destructor ~propagator_block Destruye un objeto propagator_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 Inicia de forma sincrónica un mensaje para este bloque. Un bloque llama a ISource. Cuando se complete esta función, el mensaje ya se habrá propagado al bloque.

Métodos protegidos

Nombre Descripción
decline_incoming_messages Indica al bloque que se deben rechazar los nuevos mensajes.
initialize_source_and_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 propagator_block.
process_input_messages Procesa mensajes de entrada. Esto solo es útil para los bloques de propagación, que se derivan de source_block (invalida source_block::p rocess_input_messages).
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 propagator_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_network_links Elimina todos los vínculos de red de origen y de destino de este objeto propagator_block.
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 propagator_block. Se invoca mediante el send método, cuando lo llama un bloque de origen.
unlink_source Desvincula un bloque de origen especificado de este objeto propagator_block.
unlink_sources Desvincula todos los bloques de origen de este objeto propagator_block. (Invalida ITarget::unlink_sources.)

Comentarios

Para evitar la herencia múltiple, la clase propagator_block se hereda de la clase source_block y la clase abstracta ITarget. La mayoría de las funciones de la clase target_block se replican aquí.

Jerarquía de herencia

ISource

ITarget

source_block

propagator_block

Requisitos

Encabezado: agents.h

Espacio de nombres: simultaneidad

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.

initialize_source_and_target

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

void initialize_source_and_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 propagator_block.

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

Parámetros

_PSource
Puntero al bloque ISource que se va a vincular.

process_input_messages

Procesa mensajes de entrada. Esto solo es útil para los bloques propagadores, que derivan de source_block

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

Parámetros

_PMessage
Un puntero al mensaje que se procesará.

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

Un bloque de origen vinculado invoca el método propagate en un bloque de destino. Pone en cola una tarea asincrónica para controlar el mensaje, si no hay ninguno ya en cola o en ejecución.

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

propagator_block

Construye un objeto propagator_block.

propagator_block();

~propagator_block

Destruye un objeto propagator_block .

virtual ~propagator_block();

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.

Elimina todos los vínculos de red de origen y de destino de este objeto propagator_block.

void remove_network_links();

Enviar

Inicia de forma sincrónica un mensaje para este bloque. Un bloque llama a ISource. Cuando se complete esta función, el mensaje ya se habrá propagado al bloque.

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

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

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

Desvincula un bloque de origen especificado de este objeto propagator_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 propagator_block.

virtual void unlink_sources();

Consulte también

concurrency (espacio de nombres)
source_block (clase)
ITarget (clase)