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.
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
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.
link_target_notification
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)