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 overwrite_buffer é um propagator_block multidestino, de várias origens e ordenado capaz de armazenar uma mensagem por vez. Novas mensagens substituem as mantidas anteriormente.
Sintaxe
template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;
Parâmetros
T
O tipo de conteúdo das mensagens armazenadas e propagadas pelo buffer.
Membros
Construtores públicos
| Nome | Descrição |
|---|---|
| overwrite_buffer | Sobrecarregado. Constrói um bloco de mensagens overwrite_buffer. |
| ~overwrite_buffer Destructor | Destrói o bloco de mensagens overwrite_buffer. |
Métodos públicos
| Nome | Descrição |
|---|---|
| has_value | Verifica se esse bloco de mensagens overwrite_buffer ainda tem um valor. |
| value | Obtém uma referência ao conteúdo atual da mensagem que está sendo armazenada no bloco de mensagens overwrite_buffer. |
Métodos protegidos
| Nome | Descrição |
|---|---|
| accept_message | Aceita uma mensagem oferecida por esse bloco de mensagens overwrite_buffer, retornando uma cópia da mensagem para o chamador. |
| consume_message | Consome uma mensagem oferecida anteriormente pelo bloco de mensagens overwrite_buffer e reservada pelo destino, retornando uma cópia da mensagem para o chamador. |
| link_target_notification | Um retorno de chamada que notifica que um novo destino foi vinculado a esse bloco de mensagens overwrite_buffer. |
| propagate_message | Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens overwrite_buffer. Ele é invocado pelo método propagate, quando chamado por um bloco de origem. |
| propagate_to_any_targets | Coloca o message _PMessage neste bloco de mensagens overwrite_buffer e oferece-o a todos os destinos vinculados. |
| 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 overwrite_buffer. (Substitui source_block::reserve_message.) |
| resume_propagation | Retoma a propagação depois que uma reserva é liberada. (Substitui source_block::resume_propagation.) |
| send_message | De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens overwrite_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. (Substitui ITarget::supports_anonymous_source.) |
Comentários
Um bloco de mensagens overwrite_buffer propaga cópias de sua mensagem armazenada para cada um de seus destinos.
Para mais informações, confira Blocos de mensagens assíncronas.
Hierarquia de herança
overwrite_buffer
Requisitos
Cabeçalho: agents.h
Namespace: concurrency
accept_message
Aceita uma mensagem oferecida por esse bloco de mensagens overwrite_buffer, retornando uma cópia da mensagem para o chamador.
virtual message<T>* 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.
Comentários
O bloco de mensagens overwrite_buffer retorna cópias da mensagem para seus destinos, em vez de transferir a propriedade da mensagem atualmente mantida.
consume_message
Consome uma mensagem oferecida anteriormente pelo bloco de mensagens overwrite_buffer e reservada pelo destino, retornando uma cópia da mensagem para o chamador.
virtual message<T>* 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.
has_value
Verifica se esse bloco de mensagens overwrite_buffer ainda tem um valor.
bool has_value() const;
Valor de retorno
true se o bloco tiver recebido um valor; caso contrário, false.
link_target_notification
Um retorno de chamada que notifica que um novo destino foi vinculado a esse bloco de mensagens overwrite_buffer.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Parâmetros
_PTarget
Um ponteiro para o destino que acaba de ser vinculado.
~ overwrite_buffer
Destrói o bloco de mensagens overwrite_buffer.
~overwrite_buffer();
overwrite_buffer
Constrói um bloco de mensagens overwrite_buffer.
overwrite_buffer();
overwrite_buffer(
filter_method const& _Filter);
overwrite_buffer(
Scheduler& _PScheduler);
overwrite_buffer(
Scheduler& _PScheduler,
filter_method const& _Filter);
overwrite_buffer(
ScheduleGroup& _PScheduleGroup);
overwrite_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 overwrite_buffer está agendada.
_PScheduleGroup
O objeto ScheduleGroup no qual a tarefa de propagação do bloco de mensagens overwrite_buffer 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 overwrite_buffer para determinar se ele deve ou não aceitar uma mensagem oferecida.
propagate_message
Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens overwrite_buffer. Ele é invocado pelo método propagate, quando chamado por um bloco de origem.
virtual 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
Coloca o message _PMessage neste bloco de mensagens overwrite_buffer e oferece-o a todos os destinos vinculados.
virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);
Parâmetros
_PMessage
Um ponteiro para um objeto message do qual este overwrite_buffer se apropriou.
Comentários
Esse método substitui a mensagem atual em _PMessage pela mensagem overwrite_buffer que acaba de ser aceita.
send_message
De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens overwrite_buffer. Ele é invocado pelo método send, quando chamado por um bloco de origem.
virtual message_status send_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.
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.
virtual bool supports_anonymous_source();
Valor de retorno
true porque o bloco não adia as mensagens oferecidas.
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 overwrite_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 ê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();
value
Obtém uma referência ao conteúdo atual da mensagem que está sendo armazenada no bloco de mensagens overwrite_buffer.
T value();
Valor de retorno
O conteúdo da mensagem armazenada no momento.
Comentários
O valor armazenado no overwrite_buffer pode ser alterado imediatamente após o retorno desse método. Esse método aguardará até que uma mensagem chegue se nenhuma mensagem estiver armazenada no momento em overwrite_buffer.
Confira também
Namespace de simultaneidade
Classe unbounded_buffer
Classe single_assignment