Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.