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.
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de