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 unbounded_buffer é uma estrutura ordenada de múltiplos destinos e múltiplas origens, capaz de armazenar um número ilimitado de mensagens.
Sintaxe
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
Parâmetros
_Tipo
O tipo de payload das mensagens armazenadas e propagadas pelo buffer.
Membros
Construtores públicos
| Nome | Descrição |
|---|---|
| unbounded_buffer | Sobrecarregado. Constrói um bloco de mensagens unbounded_buffer. |
| Destruidor ~unbounded_buffer | Destrói o bloco de mensagens unbounded_buffer. |
Métodos públicos
| Nome | Descrição |
|---|---|
| dequeue | Remove um item do bloco de mensagens unbounded_buffer. |
| enqueue | Adiciona um item ao bloco de mensagens unbounded_buffer. |
Métodos protegidos
| Nome | Descrição |
|---|---|
| accept_message | Aceita uma mensagem que foi oferecida por esse bloco de mensagens unbounded_buffer, transferindo a propriedade para o chamador. |
| consume_message | Consome uma mensagem que foi previamente oferecida pelo bloco de mensagens unbounded_buffer e reservada pelo alvo, transferindo a propriedade para o solicitante. |
| notificação_de_destino_de_link | Um callback que notifica que um novo destino foi vinculado a este bloco de mensagens unbounded_buffer. |
| processar_mensagens_de_entrada | Coloca o message_PMessage neste unbounded_buffer bloco de mensagens e tenta oferecê-lo a todos os destinos vinculados. |
| propagate_message | Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens unbounded_buffer. Ele é invocado pelo método propagate, quando chamado por um bloco de origem. |
| propagate_output_messages | Coloca o message_PMessage neste unbounded_buffer bloco de mensagens e tenta oferecê-lo a todos os destinos vinculados. (Substitui source_block::propagate_output_messages.) |
| 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 unbounded_buffer. (Substitui source_block::reserve_message.) |
| resume_propagation | Retoma a propagação depois que uma reserva é liberada. (Sobrescreve source_block::resume_propagation.) |
| send_message | De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens unbounded_buffer. Ele é invocado pelo método send, quando chamado por um bloco de origem. |
| supports_anonymous_source | Substitui o método supports_anonymous_source para indicar que esse bloco pode aceitar mensagens oferecidas a ele por uma fonte que não está vinculada. (Sobrescreve ITarget::supports_anonymous_source.) |
Para mais informações, confira Blocos de mensagens assíncronas.
Hierarquia de herança
unbounded_buffer
Requisitos
Cabeçalho: agents.h
Namespace: simultaneidade
aceitar_mensagem
Aceita uma mensagem que foi oferecida por esse bloco de mensagens unbounded_buffer, transferindo a propriedade para o chamador.
virtual message<_Type> * 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 unbounded_buffer e reservada pelo alvo, transferindo a propriedade para o solicitante.
virtual message<_Type> * 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.
remover da fila
Remove um item do bloco de mensagens unbounded_buffer.
_Type dequeue();
Valor de retorno
A carga da mensagem foi removida de unbounded_buffer.
enfileirar
Adiciona um item ao bloco de mensagens unbounded_buffer.
bool enqueue(
_Type const& _Item
);
Parâmetros
_Item
O item a ser adicionado.
Valor de retorno
true se o item foi aceito, false, caso contrário.
notificação_de_destino_do_link
Um callback que notifica que um novo destino foi vinculado a este bloco de mensagens unbounded_buffer.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
Parâmetros
_PTarget
Um ponteiro para o destino recém-vinculado.
propagate_message
Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens unbounded_buffer. Ele é invocado pelo método propagate, quando chamado por um bloco de origem.
virtual message_status propagate_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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.
propagar_mensagens_de_saida
Coloca o message_PMessage neste unbounded_buffer bloco de mensagens e tenta oferecê-lo a todos os destinos vinculados.
virtual void propagate_output_messages();
Comentários
Se outra mensagem já estiver à frente dessa na unbounded_buffer, a propagação para destinos vinculados não ocorrerá até que nenhuma mensagem anterior tenha sido aceita ou consumida. O primeiro destino vinculado que realizar accept ou consume com êxito a mensagem assume a posse, e então nenhum outro destino pode receber a mensagem.
processar_mensagens_de_entrada
Coloca o message_PMessage neste unbounded_buffer bloco de mensagens e tenta oferecê-lo a todos os destinos vinculados.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Parâmetros
_PMessage
Um ponteiro para a mensagem que deve ser processada.
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 unbounded_buffer.
virtual bool reserve_message(
runtime_object_identity _MsgId
);
Parâmetros
_MsgId
O runtime_object_identity do objeto message que está sendo reservado.
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();
enviar_mensagem
De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens unbounded_buffer. Ele é invocado pelo método send, quando chamado por um bloco de origem.
virtual message_status send_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _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.
suporta_fonte_anônima
Substitui o método supports_anonymous_source para indicar que esse bloco pode aceitar mensagens oferecidas a ele por uma fonte que não está vinculada.
virtual bool supports_anonymous_source();
Valor de retorno
true porque o bloco não adia as mensagens oferecidas.
buffer sem limites
Constrói um bloco de mensagens unbounded_buffer.
unbounded_buffer();
unbounded_buffer(
filter_method const& _Filter
);
unbounded_buffer(
Scheduler& _PScheduler
);
unbounded_buffer(
Scheduler& _PScheduler,
filter_method const& _Filter
);
unbounded_buffer(
ScheduleGroup& _PScheduleGroup
);
unbounded_buffer(
ScheduleGroup& _PScheduleGroup,
filter_method const& _Filter
);
Parâmetros
_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 unbounded_buffer está agendada.
_PScheduleGroup
O objeto ScheduleGroup no qual a tarefa de propagação do bloco de mensagens unbounded_buffer 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 (_Type const &) invocado por esse bloco de mensagens unbounded_buffer para determinar se ele deve ou não aceitar uma mensagem oferecida.
~ unbounded_buffer
Destrói o bloco de mensagens unbounded_buffer.
~unbounded_buffer();
Confira também
Namespace de concorrência
Classe overwrite_buffer
Classe single_assignment