Classe join
Um bloco de mensagens join
é um propagator_block
único, de várias origens, ordenado que combina mensagens de tipo T
de cada uma de suas fontes.
Sintaxe
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
O tipo de conteúdo das mensagens ingressadas e propagadas pelo bloco.
_Jtype
O tipo de bloco join
que é, greedy
ou non_greedy
Membros
Construtores públicos
Nome | Descrição |
---|---|
join | Sobrecarregado. Constrói um bloco de mensagens join . |
Destruidor ~join | Destrói o bloco join . |
Métodos protegidos
Nome | Descrição |
---|---|
accept_message | Aceita uma mensagem que foi oferecida por esse bloco de mensagens join , transferindo a propriedade para o chamador. |
consume_message | Consome uma mensagem oferecida anteriormente pelo bloco de mensagens join e reservada pelo destino, transferindo a propriedade para o chamador. |
link_target_notification | Um retorno de chamada que notifica que um novo destino foi vinculado a esse bloco de mensagens join . |
propagate_message | Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens join . Ele é invocado pelo método propagate , quando chamado por um bloco de origem. |
propagate_to_any_targets | Constrói uma mensagem de saída que contém uma mensagem de entrada de cada fonte quando todas elas tiverem propagado uma mensagem. Envia essa mensagem de saída para cada um de seus destinos. |
release_message | Libera uma reserva de mensagem anterior. (Substitui source_block::release_message.) |
reserve_message | Reserva uma mensagem oferecida anteriormente por este bloco de mensagens join . (Substitui source_block::reserve_message.) |
resume_propagation | Retoma a propagação depois que uma reserva é liberada. (Substitui source_block::resume_propagation.) |
Comentários
Para mais informações, confira Blocos de mensagens assíncronas.
Hierarquia de herança
join
Requisitos
Cabeçalho: agents.h
Namespace: concurrency
accept_message
Aceita uma mensagem que foi oferecida por esse bloco de mensagens join
, transferindo a propriedade para o chamador.
virtual message<_OutputType>* accept_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
oferecido.
Valor de retorno
Um ponteiro para o objeto message
do qual o chamador agora tem propriedade.
consume_message
Consome uma mensagem oferecida anteriormente pelo bloco de mensagens join
e reservada pelo destino, transferindo a propriedade para o chamador.
virtual message<_OutputType>* consume_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
que está sendo consumido.
Valor de retorno
Um ponteiro para o objeto message
do qual o chamador agora tem propriedade.
Comentários
Semelhante a accept
, mas é sempre precedido por uma chamada para reserve
.
join
Constrói um bloco de mensagens 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
O número de entradas que será permitido a esse bloco join
.
_Filter
Uma função de filtro que determina se as mensagens oferecidas devem ser aceitas.
_PScheduler
O objeto Scheduler
no qual a tarefa de propagação do bloco de mensagens join
está agendada.
_PScheduleGroup
O objeto ScheduleGroup
no qual a tarefa de propagação do bloco de mensagens join
está agendada. O objeto Scheduler
usado é implícito pelo grupo agendado.
Comentários
O runtime usará o agendador padrão se você não especificar os parâmetros _PScheduler
ou _PScheduleGroup
.
O tipo filter_method
é um functor com assinatura bool (T const &)
invocado por esse bloco de mensagens join
para determinar se ele deve ou não aceitar uma mensagem oferecida.
~juntar
Destrói o bloco join
.
~join();
link_target_notification
Um retorno de chamada que notifica que um novo destino foi vinculado a esse bloco de mensagens join
.
virtual void link_target_notification(_Inout_ ITarget<std::vector<T>> *);
propagate_message
Passa uma mensagem de modo assíncrono de um bloco ISource
para este bloco de mensagens join
. Ele é invocado pelo método propagate
, quando chamado por um bloco de origem.
message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Parâmetros
_PMessage
Um ponteiro para o message
objeto.
_PSource
Um ponteiro para o bloco de origem que oferece a mensagem.
Valor de retorno
Uma indicação de message_status do que o destino decidiu fazer com a mensagem.
propagate_to_any_targets
Constrói uma mensagem de saída que contém uma mensagem de entrada de cada fonte quando todas elas tiverem propagado uma mensagem. Envia essa mensagem de saída para cada um de seus destinos.
void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);
release_message
Libera uma reserva de mensagem anterior.
virtual void release_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
que está sendo liberado.
reserve_message
Reserva uma mensagem oferecida anteriormente por este bloco de mensagens join
.
virtual bool reserve_message(runtime_object_identity _MsgId);
Parâmetros
_MsgId
O runtime_object_identity
do objeto message
oferecido.
Valor de retorno
true
se a mensagem foi reservada com êxito; caso contrário, false
.
Comentários
Depois de reserve
ser chamado, se ele retornar true
, consume
ou release
deverá ser chamado para assumir ou liberar a propriedade da mensagem.
resume_propagation
Retoma a propagação depois que uma reserva é liberada.
virtual void resume_propagation();
Confira também
Namespace de simultaneidade
Classe choice
Classe multitype_join