multitype_join (Clase)
Un bloque de mensajería multitype_join
es un bloque de mensajería de destino único, de varios orígenes, que combina los mensajes de diferentes tipos de cada uno de sus orígenes y ofrece una tupla de los mensajes combinados con sus destinos.
Sintaxis
template<
typename T,
join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;
Parámetros
T
Tipo de carga tuple
de los mensajes unidos y propagados por el bloque.
_Jtype
El tipo de bloque join
: greedy
o non_greedy
.
Miembros
Definiciones de tipos públicas
Nombre | Descripción |
---|---|
type |
Alias de tipo para T . |
Constructores públicos
Nombre | Descripción |
---|---|
multitype_join | Con sobrecarga. Construye un bloque de mensajería multitype_join . |
Destructor ~multitype_join | Destruye el bloque de mensajería multitype_join . |
Métodos públicos
Nombre | Descripción |
---|---|
accept | Acepta un mensaje ofrecido por este bloque multitype_join y transfiere la propiedad al autor de la llamada. |
acquire_ref | Adquiere un recuento de referencias en este bloque de mensajería multitype_join para evitar la eliminación. |
consumo | Consume un mensaje ofrecido previamente por el bloque de mensajería multitype_join y reservado correctamente por el destino, y transfiere la propiedad al autor de la llamada. |
link_target | Enlaza un bloque de destino a este bloque de mensajería multitype_join . |
release | Libera una reserva de mensajes correcta anterior. |
release_ref | Libera un recuento de referencias en este bloque de mensajería multiple_join . |
reserve | Reserva un mensaje ofrecido anteriormente por este bloque de mensajería multitype_join . |
unlink_target | Desenlaza un bloque de destino de este bloque de mensajería multitype_join . |
unlink_targets | Desenlaza todos los destinos de este bloque de mensajería multitype_join . (Invalida ISource::unlink_targets.) |
Comentarios
Para obtener más información, consulte Bloques de mensajes asincrónicos.
Jerarquía de herencia
multitype_join
Requisitos
Encabezado: agents.h
Espacio de nombres: simultaneidad
aceptar
Acepta un mensaje ofrecido por este bloque multitype_join
y transfiere la propiedad al autor de la llamada.
virtual message<_Destination_type>* accept(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_MsgId
El valor runtime_object_identity
del objeto message
ofrecido.
_PTarget
Puntero al bloque de destino que está llamando al método accept
.
Valor devuelto
Puntero al mensaje que ahora posee el autor de la llamada.
acquire_ref
Adquiere un recuento de referencias en este bloque de mensajería multitype_join
para evitar la eliminación.
virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_PTarget
Puntero al bloque de destino que llama 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
.
consumir
Consume un mensaje ofrecido previamente por el bloque de mensajería multitype_join
y reservado correctamente por el destino, y transfiere la propiedad al autor de la llamada.
virtual message<_Destination_type>* consume(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_MsgId
runtime_object_identity
del objeto message
reservado.
_PTarget
Puntero al bloque de destino 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
.
link_target
Enlaza un bloque de destino a este bloque de mensajería multitype_join
.
virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_PTarget
Puntero a un bloque ITarget
que se enlazará a este bloque de mensajería multitype_join
.
multitype_join
Construye un bloque de mensajería multitype_join
.
explicit multitype_join(
T _Tuple);
multitype_join(
Scheduler& _PScheduler,
T _Tuple);
multitype_join(
ScheduleGroup& _PScheduleGroup,
T _Tuple);
multitype_join(
multitype_join&& _Join);
Parámetros
_Tuple
tuple
de orígenes para este bloque de mensajería multitype_join
.
_PScheduler
El objeto Scheduler
dentro del que se programa la tarea de propagación para el bloque de mensajería multitype_join
.
_PScheduleGroup
El objeto ScheduleGroup
dentro del que se programa la tarea de propagación para el bloque de mensajería multitype_join
. El objeto Scheduler
utilizado está implícito en el grupo de programación.
_Join
Bloque de mensajería multitype_join
desde el que se realizará la copia. Tenga en cuenta que el objeto original es huérfano, por lo que este constructor pasa a ser 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.
~multitype_join
Destruye el bloque de mensajería multitype_join
.
~multitype_join();
release
Libera una reserva de mensajes correcta anterior.
virtual void release(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_MsgId
El valor runtime_object_identity
del objeto message
que se libera.
_PTarget
Puntero al bloque de destino que está llamando al método release
.
release_ref
Libera un recuento de referencias en este bloque de mensajería multiple_join
.
virtual void release_ref(_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_PTarget
Puntero al bloque de destino que llama a este método.
Comentarios
Un objeto ITarget
que se desenlazará de este origen llama a este método. El bloque de origen se permite para liberar los recursos reservados para el bloque de destino.
reserva
Reserva un mensaje ofrecido anteriormente por este bloque de mensajería multitype_join
.
virtual bool reserve(
runtime_object_identity _MsgId,
_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_MsgId
El runtime_object_identity
del objeto message
que se está reservando.
_PTarget
Puntero al bloque de destino que está llamando al método reserve
.
Valor devuelto
true
si se ha reservado correctamente el mensaje; de lo contrario, false
. Las reservas pueden producir errores por muchas razones, como que el mensaje ya estaba reservado o aceptado por otro destino, que el origen deniegue reservas, etc.
Comentarios
Después de llamar a reserve
, si no hay errores, debe llamar a consume
o release
para tomar la posesión del mensaje o renunciar a ella respectivamente.
unlink_target
Desenlaza un bloque de destino de este bloque de mensajería multitype_join
.
virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);
Parámetros
_PTarget
Puntero a un bloque ITarget
que se desenlazará de este bloque de mensajería multitype_join
.
unlink_targets
Desenlaza todos los destinos de este bloque de mensajería multitype_join
.
virtual void unlink_targets();
Consulte también
concurrency (espacio de nombres)
choice (clase)
join (clase)
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