Share via


Classe multitype_join

Um bloco de mensagens multitype_join é um bloco de mensagens de várias origens e de destino único que combina mensagens de diferentes tipos de cada uma de suas fontes e oferece uma tupla das mensagens combinadas aos seus destinos.

Sintaxe

template<
    typename T,
    join_type _Jtype = non_greedy
>
class multitype_join: public ISource<typename _Unwrap<T>::type>;

Parâmetros

T
O tipo de conteúdo tuple das mensagens ingressadas e propagadas pelo bloco.

_Jtype
O tipo de bloco join que é, greedy ou non_greedy

Membros

Typedefs públicos

Nome Descrição
type Um alias de tipo para T.

Construtores públicos

Nome Descrição
multitype_join Sobrecarregado. Constrói um bloco de mensagens multitype_join.
Destruidor ~multitype_join Destrói o bloco de mensagens multitype_join.

Métodos públicos

Nome Descrição
accept Aceita uma mensagem que foi oferecida por esse bloco multitype_join, transferindo a propriedade para o chamador.
acquire_ref Adquire uma contagem de referência nesse bloco de mensagens multitype_join para evitar a exclusão.
consumir Consome uma mensagem oferecida anteriormente pelo bloco de mensagens multitype_join e reservada com êxito pelo destino, transferindo a propriedade para o chamador.
link_target Vincula um bloco de destino a este bloco de mensagens multitype_join.
release Libera uma reserva de mensagem anterior bem-sucedida.
release_ref Libera uma contagem de referências neste bloco de mensagens multiple_join.
reserve Reserva uma mensagem oferecida anteriormente por este bloco de mensagens multitype_join.
unlink_target Desvincula um bloco de destino deste bloco de mensagens multitype_join.
unlink_targets Desvincula todos os destinos deste bloco de mensagens multitype_join. (Substitui ISource::unlink_targets.)

Comentários

Para mais informações, confira Blocos de mensagens assíncronas.

Hierarquia de herança

ISource

multitype_join

Requisitos

Cabeçalho: agents.h

Namespace: concurrency

accept

Aceita uma mensagem que foi oferecida por esse bloco multitype_join, transferindo a propriedade para o chamador.

virtual message<_Destination_type>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_MsgId
O runtime_object_identity do objeto message oferecido.

_PTarget
Um ponteiro para o bloco de destino que está chamando o método accept.

Valor de Devolução

Um ponteiro para a mensagem da qual o chamador agora tem propriedade.

acquire_ref

Adquire uma contagem de referência nesse bloco de mensagens multitype_join para evitar a exclusão.

virtual void acquire_ref(_Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_PTarget
Um ponteiro para o bloco de destino que está chamando esse método.

Comentários

Esse método é chamado por um objeto ITarget que está sendo vinculado a essa fonte durante o método link_target.

consumir

Consome uma mensagem oferecida anteriormente pelo bloco de mensagens multitype_join e reservada com êxito pelo destino, transferindo a propriedade para o chamador.

virtual message<_Destination_type>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_MsgId
O runtime_object_identity do objeto reservado message.

_PTarget
Um ponteiro para o bloco de destino que está chamando o método consume.

Valor de Devolução

Um ponteiro para o objeto message do qual o chamador agora tem propriedade.

Comentários

O consume método é semelhante a accept, mas deve ser sempre precedido por uma chamada para reserve o retornado true.

Vincula um bloco de destino a este bloco de mensagens multitype_join.

virtual void link_target(_Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_PTarget
Um ponteiro para um bloco ITarget para vincular a esse bloco de mensagens multitype_join.

multitype_join

Constrói um bloco de mensagens multitype_join.

explicit multitype_join(
    T _Tuple);

multitype_join(
    Scheduler& _PScheduler,
    T _Tuple);

multitype_join(
    ScheduleGroup& _PScheduleGroup,
    T _Tuple);

multitype_join(
    multitype_join&& _Join);

Parâmetros

_Tuple
Uma tuple das fontes para esse bloco de mensagens multitype_join.

_PScheduler
O objeto Scheduler no qual a tarefa de propagação do bloco de mensagens multitype_join está agendada.

_PScheduleGroup
O objeto ScheduleGroup no qual a tarefa de propagação do bloco de mensagens multitype_join está agendada. O objeto Scheduler usado é implícito pelo grupo agendado.

_Join
Um bloco de mensagens multitype_join do qual copiar. Observe que o objeto original é órfão, tornando-o um construtor de movimentação.

Comentários

O runtime usará o agendador padrão se você não especificar os parâmetros _PScheduler ou _PScheduleGroup.

A construção de movimentação não é executada sob um bloqueio, o que significa que cabe ao usuário garantir que não haja tarefas leves em voo no momento da movimentação. Caso contrário, várias corridas podem ocorrer, levando a exceções ou estado inconsistente.

~multitype_join

Destrói o bloco de mensagens multitype_join.

~multitype_join();

release

Libera uma reserva de mensagem anterior bem-sucedida.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_MsgId
O runtime_object_identity do objeto message que está sendo liberado.

_PTarget
Um ponteiro para o bloco de destino que está chamando o método release.

release_ref

Libera uma contagem de referências neste bloco de mensagens multiple_join.

virtual void release_ref(_Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_PTarget
Um ponteiro para o bloco de destino que está chamando esse método.

Comentários

Esse método é chamado por um objeto ITarget que está sendo desvinculado dessa fonte. O bloco de origem tem permissão para liberar todos os recursos reservados para o bloco de destino.

reserve

Reserva uma mensagem oferecida anteriormente por este bloco de mensagens multitype_join.

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_MsgId
O runtime_object_identity do objeto message que está sendo reservado.

_PTarget
Um ponteiro para o bloco de destino que está chamando o método reserve.

Valor de Devolução

true se a mensagem foi reservada com êxito; caso contrário, false. As reservas podem falhar por muitos motivos, incluindo: a mensagem já foi reservada ou aceita por outro destino, a origem pode negar reservas etc.

Comentários

Depois de chamar reserve, se tiver êxito, você deverá chamar consume ou release para assumir ou conceder a posse da mensagem, respectivamente.

Desvincula um bloco de destino deste bloco de mensagens multitype_join.

virtual void unlink_target(_Inout_ ITarget<_Destination_type>* _PTarget);

Parâmetros

_PTarget
Um ponteiro para um bloco ITarget a ser desvinculado desse bloco de mensagens multitype_join.

Desvincula todos os destinos deste bloco de mensagens multitype_join.

virtual void unlink_targets();

Confira também

Namespace de simultaneidade
Classe choice
Classe join