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