Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um bloco de mensagens join é um bloco ordenado com um único destino e várias origens que combina mensagens do 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 payload das mensagens incorporadas 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. |
| ~join Destrutor | 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 alvo, transferindo a propriedade para o chamador. |
| notificação_de_destino_de_link | Um callback que notifica que um novo alvo foi vinculado a este 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 esta mensagem de saída para cada um de seus alvos. |
| mensagem_de_lançamento | 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. (Sobrescreve 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: simultaneidade
aceitar_mensagem
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.
consumir_mensagem
Consome uma mensagem que foi previamente oferecida pelo bloco de mensagens join e reservada pelo alvo, transferindo a propriedade para o solicitante.
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.
ingressar
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 este bloco join estará autorizado a ter.
_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 é implicado pelo grupo de agendamento.
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.
~unir
Destrói o bloco join.
~join();
notificação_de_destino_do_link
Um callback que notifica que um novo destino foi vinculado a este 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 fornece a mensagem.
Valor de retorno
Uma indicação de message_status sobre o 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 alvos.
void propagate_to_any_targets(_Inout_opt_ message<_OutputType> *);
mensagem_de_lançamento
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á para ser liberado.
mensagem_reserva
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 sucesso; 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 concorrência
Classe choice
Classe multitype_join