Compartilhar via


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

ISource

ITarget

source_block

propagator_block

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

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