Compartir a través de


Clase single_assignment

Un bloque de mensajería single_assignment es un bloque propagator_block de destino único, de varios orígenes y ordenado capaz de almacenar un único message de una sola escritura.

Sintaxis

template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Parámetros

T
Tipo de carga de los mensajes almacenados y propagados por el búfer.

Miembros

Constructores públicos

Nombre Descripción
single_assignment Con sobrecarga. Construye un bloque de mensajería single_assignment .
Destructor ~single_assignment Destruye el bloque de mensajería single_assignment.

Métodos públicos

Nombre Descripción
has_value Comprueba si este bloque de mensajería single_assignment se ha inicializado con un valor.
value Obtiene una referencia a la carga actual del mensaje que se almacena en el bloque de mensajería single_assignment.

Métodos protegidos

Nombre Descripción
accept_message Acepta un mensaje ofrecido por este bloque de mensajería single_assignment y devuelve una copia del mensaje al autor de la llamada.
consume_message Consume un mensaje ofrecido previamente por single_assignment y reservado por el destino, devolviendo una copia del mensaje al autor de la llamada.
link_target_notification Devolución de llamada que notifica que se ha vinculado un nuevo destino a este bloque de mensajería single_assignment.
propagate_message Pasa de forma asincrónica un mensaje de un bloque ISource a este bloque de mensajería single_assignment. Se invoca mediante el propagate método, cuando lo llama un bloque de origen.
propagate_to_any_targets Coloca message _PMessage en este bloque de mensajería single_assignment y lo ofrece a todos los destinos vinculados.
release_message Libera una reserva de mensajes anterior. (Invalida source_block::release_message).
reserve_message Reserva un mensaje ofrecido anteriormente por este bloque de mensajería single_assignment. (Invalida source_block::reserve_message).
resume_propagation Reanuda la propagación después de que se haya liberado una reserva. (Invalida source_block::resume_propagation).
send_message Pasa de forma sincrónica un mensaje de un ISource bloque a este single_assignment bloque de mensajería. Se invoca mediante el send método, cuando lo llama un bloque de origen.

Comentarios

Un bloque de mensajería single_assignment propaga copias de su mensaje a cada destino.

Para obtener más información, consulte Bloques de mensajes asincrónicos.

Jerarquía de herencia

ISource

ITarget

source_block

propagator_block

single_assignment

Requisitos

Encabezado: agents.h

Espacio de nombres: simultaneidad

accept_message

Acepta un mensaje ofrecido por este bloque de mensajería single_assignment y devuelve una copia del mensaje al autor de la llamada.

virtual message<T>* accept_message(runtime_object_identity _MsgId);

Parámetros

_MsgId
El valor runtime_object_identity del objeto message ofrecido.

Valor devuelto

Puntero al objeto message del que el autor de la llamada tiene ahora la propiedad.

Comentarios

El bloque de mensajería single_assignment devuelve copias del mensaje a sus destinos, en lugar de transferir la propiedad del mensaje mantenido actualmente.

consume_message

Consume un mensaje ofrecido previamente por single_assignment y reservado por el destino, devolviendo una copia del mensaje al autor de la llamada.

virtual message<T>* consume_message(runtime_object_identity _MsgId);

Parámetros

_MsgId
Valor runtime_object_identity del objeto message que se consumirá.

Valor devuelto

Puntero al objeto message del que el autor de la llamada tiene ahora la propiedad.

Comentarios

Es similar a accept, pero siempre va precedido de una llamada a reserve.

has_value

Comprueba si este bloque de mensajería single_assignment se ha inicializado con un valor.

bool has_value() const;

Valor devuelto

true si el bloque ha recibido un valor; de lo contrario, false.

Devolución de llamada que notifica que se ha vinculado un nuevo destino a este bloque de mensajería single_assignment.

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

Parámetros

_PTarget
Puntero al destino recién vinculado.

propagate_message

Pasa de forma asincrónica un mensaje de un bloque ISource a este bloque de mensajería single_assignment. Se invoca mediante el propagate método, cuando lo llama un bloque de origen.

virtual message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _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.

propagate_to_any_targets

Coloca en message _PMessage este single_assignment bloque de mensajería y lo ofrece a todos los destinos vinculados.

virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);

Parámetros

_PMessage
Puntero a un message del que este bloque de mensajería single_assignment ha tomado posesión.

release_message

Libera una reserva de mensajes anterior.

virtual void release_message(runtime_object_identity _MsgId);

Parámetros

_MsgId
El valor runtime_object_identity del objeto message que se libera.

reserve_message

Reserva un mensaje ofrecido anteriormente por este bloque de mensajería single_assignment.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parámetros

_MsgId
El runtime_object_identity del objeto message que se está reservando.

Valor devuelto

true si se ha reservado correctamente el mensaje; de lo contrario, false.

Comentarios

Después de llamar a reserve, si devuelve true, se debe llamar a consume o release para aceptar o liberar la propiedad del mensaje.

resume_propagation

Reanuda la propagación después de que se haya liberado una reserva.

virtual void resume_propagation();

send_message

Pasa de forma sincrónica un mensaje de un ISource bloque a este single_assignment bloque de mensajería. Se invoca mediante el send método, cuando lo llama un bloque de origen.

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _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.

single_assignment

Construye un bloque de mensajería single_assignment .

single_assignment();

single_assignment(
    filter_method const& _Filter);

single_assignment(
    Scheduler& _PScheduler);

single_assignment(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

single_assignment(
    ScheduleGroup& _PScheduleGroup);

single_assignment(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

Parámetros

_Filter
Función de filtro que determina si se deben aceptar los mensajes ofrecidos.

_PScheduler
El objeto Scheduler dentro del que se programa la tarea de propagación para el bloque de mensajería single_assignment .

_PScheduleGroup
El objeto ScheduleGroup dentro del que se programa la tarea de propagación para el bloque de mensajería single_assignment . El objeto Scheduler utilizado está implícito en el grupo de programación.

Comentarios

El runtime usa el programador predeterminado si no se especifican los parámetros _PScheduler o _PScheduleGroup .

El tipo filter_method es un functor con firma bool (T const &) invocada por este bloque de mensajería single_assignment para determinar si debe aceptar o no un mensaje ofrecido.

~single_assignment

Destruye el bloque de mensajería single_assignment.

~single_assignment();

value

Obtiene una referencia a la carga actual del mensaje que se almacena en el bloque de mensajería single_assignment.

T const& value();

Valor devuelto

La carga del mensaje almacenado.

Comentarios

Este método esperará hasta que llegue un mensaje si no hay ningún mensaje almacenado actualmente en el bloque de mensajería single_assignment.

Consulte también

concurrency (espacio de nombres)
overwrite_buffer (clase)
unbounded_buffer (clase)