join (clase)
Un bloque de mensajería join
es un bloque propagator_block
de destino único y de varios orígenes ordenado, que combina los mensajes de tipo T
de cada uno de sus orígenes.
Sintaxis
template<class T,
join_type _Jtype = non_greedy>
class join : public propagator_block<single_link_registry<ITarget<std::vector<T>>>,
multi_link_registry<ISource<T>>>;
Parámetros
T
Tipo de carga de los mensajes unidos y propagados por el bloque.
_Jtype
El tipo de bloque join
: greedy
o non_greedy
.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
join | Con sobrecarga. Construye un bloque de mensajería join . |
Destructor ~join | Destruye el bloque join . |
Métodos protegidos
Nombre | Descripción |
---|---|
accept_message | Acepta un mensaje ofrecido por este bloque de mensajería join y transfiere la propiedad al autor de la llamada. |
consume_message | Consume un mensaje ofrecido previamente por el bloque de mensajería join y reservado por el destino, y transfiere la propiedad 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 join . |
propagate_message | Pasa de forma asincrónica un mensaje de un bloque ISource a este bloque de mensajería join . Se invoca mediante el propagate método, cuando lo llama un bloque de origen. |
propagate_to_any_targets | Construye un mensaje de salida que contiene un mensaje de entrada de cada origen cuando todos han propagado un mensaje. Envía este mensaje de salida a cada uno de sus destinos. |
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 join . (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). |
Comentarios
Para obtener más información, consulte Bloques de mensajes asincrónicos.
Jerarquía de herencia
join
Requisitos
Encabezado: agents.h
Espacio de nombres: simultaneidad
accept_message
Acepta un mensaje ofrecido por este bloque de mensajería join
y transfiere la propiedad al autor de la llamada.
virtual message<_OutputType>* 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.
consume_message
Consume un mensaje ofrecido previamente por el bloque de mensajería join
y reservado por el destino, y transfiere la propiedad al autor de la llamada.
virtual message<_OutputType>* 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
.
join
Construye un bloque de mensajería join
.
join(
size_t _NumInputs);
join(
size_t _NumInputs,
filter_method const& _Filter);
join(
Scheduler& _PScheduler,
size_t _NumInputs);
join(
Scheduler& _PScheduler,
size_t _NumInputs,
filter_method const& _Filter);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs);
join(
ScheduleGroup& _PScheduleGroup,
size_t _NumInputs,
filter_method const& _Filter);
Parámetros
_NumInputs
El número de entradas de este bloque join
que se permitirán.
_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 join
.
_PScheduleGroup
El objeto ScheduleGroup
dentro del que se programa la tarea de propagación para el bloque de mensajería join
. 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 join
para determinar si debe aceptar o no un mensaje ofrecido.
~juntar
Destruye el bloque join
.
~join();
link_target_notification
Devolución de llamada que notifica que se ha vinculado un nuevo destino a este bloque de mensajería join
.
virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);
propagate_message
Pasa de forma asincrónica un mensaje de un bloque ISource
a este bloque de mensajería join
. Se invoca mediante el propagate
método, cuando lo llama un bloque de origen.
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
Construye un mensaje de salida que contiene un mensaje de entrada de cada origen cuando todos han propagado un mensaje. Envía este mensaje de salida a cada uno de sus destinos.
void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);
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 join
.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parámetros
_MsgId
El valor runtime_object_identity
del objeto message
ofrecido.
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();
Consulte también
concurrency (espacio de nombres)
choice (clase)
multitype_join (clase)