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
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
.
link_target
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.
unlink_target
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
.
unlink_targets
Desvincula todos os destinos deste bloco de mensagens multitype_join
.
virtual void unlink_targets();
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de