Compartilhar via


classe unbounded_buffer

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

ISource

ITarget

source_block

propagator_block

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.

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