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 choice es un bloque de varios orígenes y de destino único que representa una interacción del flujo de control con un conjunto de orígenes. El bloque selector esperará a cualquiera de múltiples orígenes para que produzca un mensaje y transmitirá el índice del origen que generó el mensaje.
Sintaxis
template<
class T
>
class choice: public ISource<size_t>;
Parámetros
T
Tipo basado en tuple que representa las cargas de los orígenes de entrada.
Miembros
Definiciones de tipos públicas
| Nombre | Descripción |
|---|---|
type |
Alias de tipo para T. |
Constructores públicos
| Nombre | Descripción |
|---|---|
| choice | Sobrecargado Construye un bloque de mensajería choice . |
| Destructor ~choice | Destruye el bloque de mensajería choice. |
Métodos públicos
| Nombre | Descripción |
|---|---|
| accept | Acepta un mensaje ofrecido por este bloque choice y transfiere la propiedad al autor de la llamada. |
| acquire_ref | Adquiere un recuento de referencias en este bloque de mensajería choice para evitar la eliminación. |
| consumo | Consume un mensaje ofrecido previamente por el bloque de mensajería choice y reservado correctamente por el destino, y transfiere la propiedad al autor de la llamada. |
| has_value | Comprueba si este bloque de mensajería choice se ha inicializado con un valor ya. |
| índice | Devuelve un índice en el tuple para representar el elemento seleccionado por el bloque de mensajería choice. |
| link_target | Enlaza un bloque de destino a este bloque de mensajería choice. |
| release | Libera una reserva exitosa de mensajes anterior. |
| release_ref | Libera un recuento de referencias en este bloque de mensajería choice. |
| reserve | Reserva un mensaje ofrecido anteriormente por este bloque de mensajería choice. |
| unlink_target | Desenlaza un bloque de destino de este bloque de mensajería choice. |
| unlink_targets | Desvincula todos los destinos de este bloque de mensajería choice. (Invalida ISource::unlink_targets.) |
| value | Obtiene el mensaje cuyo índice se ha seleccionado mediante el bloque de mensajería choice. |
Comentarios
El bloque de elección garantiza que solo se consuma uno de los mensajes entrantes.
Para obtener más información, consulte Bloques de mensajes asincrónicos.
Jerarquía de herencia
choice
Requisitos
Encabezado: agents.h
Espacio de nombres: simultaneidad
aceptar
Acepta un mensaje ofrecido por este bloque choice y transfiere la propiedad al autor de la llamada.
virtual message<size_t>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_MsgId
El valor runtime_object_identity del objeto message ofrecido.
_PTarget
Un puntero al bloque objetivo que está llamando al método accept.
Valor devuelto
Un puntero al mensaje del que ahora el llamante es propietario.
adquirir_referencia
Adquiere un recuento de referencias en este bloque de mensajería choice para evitar la eliminación.
virtual void acquire_ref(_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_PTarget
Un puntero hacia el bloque de destino que está llamando a este método.
Comentarios
Un objeto ITarget que está vinculado a este origen llama a este método durante el método link_target.
opción
Construye un bloque de mensajería choice .
explicit choice(
T _Tuple);
choice(
Scheduler& _PScheduler,
T _Tuple);
choice(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
choice(
choice&& _Choice);
Parámetros
_Tuple
tuple de orígenes para la elección.
_PScheduler
El objeto Scheduler dentro del que se programa la tarea de propagación para el bloque de mensajería choice .
_PScheduleGroup
El objeto ScheduleGroup dentro del que se programa la tarea de propagación para el bloque de mensajería choice . El objeto Scheduler utilizado está implícito en el grupo de tareas.
_Choice
Bloque de mensajería choice desde el que se realizará la copia. Tenga en cuenta que el objeto original es huérfano, por lo que esto se convierte en un constructor de movimiento.
Comentarios
El runtime usa el programador predeterminado si no se especifican los parámetros _PScheduler o _PScheduleGroup .
La construcción de movimiento no se lleva acabo con un bloqueo, lo que significa que el usuario debe asegurarse de que no hay ninguna tarea ligera en marcha en el momento del movimiento. De lo contrario, se pueden producir numerosas carreras, que darán lugar a excepciones o a un estado incoherente.
~elección
Destruye el bloque de mensajería choice.
~choice();
consumir
Consume un mensaje ofrecido previamente por el bloque de mensajería choice y reservado correctamente por el destino, y transfiere la propiedad al autor de la llamada.
virtual message<size_t>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_MsgId
runtime_object_identity del objeto message reservado.
_PTarget
Un puntero al bloque objetivo que está llamando al método consume.
Valor devuelto
Puntero al objeto message del que el autor de la llamada tiene ahora la propiedad.
Comentarios
El método consume es similar a accept, pero siempre debe ir precedido de una llamada a reserve que haya devuelto true.
has_value
Comprueba si este bloque de mensajería choice se ha inicializado con un valor ya.
bool has_value() const;
Valor devuelto
true si el bloque ha recibido un valor; de lo contrario, false.
índice
Devuelve un índice en el tuple para representar el elemento seleccionado por el bloque de mensajería choice.
size_t index();
Valor devuelto
Índice del mensaje.
Comentarios
La carga del mensaje se puede extraer mediante el método get.
link_target
Enlaza un bloque de destino a este bloque de mensajería choice.
virtual void link_target(_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_PTarget
Un puntero a un bloque ITarget para enlazar con este bloque de mensajería choice.
lanzamiento
Libera una reserva exitosa de mensajes anterior.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_MsgId
El valor runtime_object_identity del objeto message que se libera.
_PTarget
Un puntero al bloque objetivo que está llamando al método release.
release_ref
Libera un recuento de referencias en este bloque de mensajería choice.
virtual void release_ref(_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_PTarget
Un puntero hacia el bloque de destino que está llamando a este método.
Comentarios
Este método es llamado por un objeto ITarget que está siendo desenlazado de este origen. El bloque de origen está permitido liberar los recursos reservados para el bloque de destino.
reserva
Reserva un mensaje ofrecido anteriormente por este bloque de mensajería choice.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_MsgId
El runtime_object_identity del objeto message que se está reservando.
_PTarget
Un puntero al bloque objetivo que está llamando al método reserve.
Valor devuelto
true si se ha reservado correctamente el mensaje; de lo contrario, false. Las reservas pueden fallar por muchas razones, como que otro destino ya haya reservado o aceptado el mensaje, que el origen pueda denegar las reservas, etc.
Comentarios
Después de llamar a reserve, si tiene éxito, debe llamar a consume o release para tomar posesión del mensaje o renunciar a ella, respectivamente.
desvincular_objetivo
Desenlaza un bloque de destino de este bloque de mensajería choice.
virtual void unlink_target(_Inout_ ITarget<size_t>* _PTarget);
Parámetros
_PTarget
Puntero a un bloque ITarget para desenlazar de este bloque de mensajería choice.
desvincular_objetivos
Desvincula todos los destinos de este bloque de mensajería choice.
virtual void unlink_targets();
Comentarios
No es necesario llamar a este método desde el destructor porque el destructor del bloque interno single_assignment se desvinculará correctamente.
valor
Obtiene el mensaje cuyo índice se ha seleccionado mediante el bloque de mensajería choice.
template <
typename _Payload_type
>
_Payload_type const& value();
Parámetros
_Payload_type
Tipo de carga del mensaje.
Valor devuelto
Carga del mensaje.
Comentarios
Dado que un bloque de mensajería choice puede tomar entradas con diferentes tipos de carga, debe especificar el tipo de carga en la recuperación. Puede determinar el tipo en función del resultado del método index.
Consulte también
espacio de nombres de concurrencia
Unirse a Clase
Clase single_assignment