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
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.
link_source
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.
remove_network_links
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.
unlink_source
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.
unlink_sources
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)