Compartilhar via


Entrar na Classe

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

ISource

ITarget

source_block

propagator_block

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();

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