Compartir a través de


Clase unbounded_buffer

Un bloque de mensajería unbounded_buffer es un bloque propagator_block de destino único, de varios orígenes y ordenado capaz de almacenar un número ilimitado de mensajes.

Sintaxis

template<
   class             _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget<            _Type>>, multi_link_registry<ISource<            _Type>>>;

Parámetros

_Type
El tipo de carga de los mensajes almacenados y propagados por el búfer.

Miembros

Constructores públicos

Nombre Descripción
unbounded_buffer Con sobrecarga. Construye un bloque de mensajería unbounded_buffer.
~unbounded_buffer Destructor Destruye el bloque de mensajería unbounded_buffer.

Métodos públicos

Nombre Descripción
dequeue Quita un elemento del bloque de mensajería unbounded_buffer.
enqueue Agrega un elemento al bloque de mensajería unbounded_buffer.

Métodos protegidos

Nombre Descripción
accept_message Acepta un mensaje ofrecido por este bloque de mensajería unbounded_buffer y transfiere la propiedad al autor de la llamada.
consume_message Consume un mensaje ofrecido previamente por el bloque de mensajería unbounded_buffer y reservado por el destino, y transfiere la propiedad al autor de la llamada.
link_target_notification Devolución de llamada que notifica que se ha vinculado un nuevo destino a este bloque de mensajería unbounded_buffer.
process_input_messages Coloca en message _PMessage este unbounded_buffer bloque de mensajería e intenta ofrecerlo a todos los destinos vinculados.
propagate_message Pasa de forma asincrónica un mensaje de un bloque ISource a este bloque de mensajería unbounded_buffer. Se invoca mediante el propagate método, cuando lo llama un bloque de origen.
propagate_output_messages Coloca en message _PMessage este unbounded_buffer bloque de mensajería e intenta ofrecerlo a todos los destinos vinculados. (Invalida source_block::propagate_output_messages.)
release_message Libera una reserva de mensajes anterior. (Invalida source_block::release_message).
reserve_message Reserva un mensaje ofrecido anteriormente por este bloque de mensajería unbounded_buffer. (Invalida source_block::reserve_message).
resume_propagation Reanuda la propagación después de que se haya liberado una reserva. (Invalida source_block::resume_propagation).
send_message Pasa de forma sincrónica un mensaje de un ISource bloque a este unbounded_buffer bloque de mensajería. Se invoca mediante el send método, cuando lo llama un bloque de origen.
supports_anonymous_source Invalida el supports_anonymous_source método para indicar que este bloque puede aceptar mensajes ofrecidos por un origen que no está vinculado. (Invalida ITarget::supports_anonymous_source.)

Para obtener más información, consulte Bloques de mensajes asincrónicos.

Jerarquía de herencia

ISource

ITarget

source_block

propagator_block

unbounded_buffer

Requisitos

Encabezado: agents.h

Espacio de nombres: simultaneidad

accept_message

Acepta un mensaje ofrecido por este bloque de mensajería unbounded_buffer y transfiere la propiedad al autor de la llamada.

virtual message<_Type> * accept_message(
   runtime_object_identity                 _MsgId
);

Parámetros

_MsgId
El valor runtime_object_identity del objeto message ofrecido.

Valor devuelto

Puntero al objeto message del que el autor de la llamada tiene ahora la propiedad.

consume_message

Consume un mensaje ofrecido previamente por el bloque de mensajería unbounded_buffer y reservado por el destino, y transfiere la propiedad al autor de la llamada.

virtual message<_Type> * consume_message(
   runtime_object_identity                 _MsgId
);

Parámetros

_MsgId
Valor runtime_object_identity del objeto message que se consumirá.

Valor devuelto

Puntero al objeto message del que el autor de la llamada tiene ahora la propiedad.

Comentarios

Es similar a accept, pero siempre va precedido de una llamada a reserve.

dequeue

Quita un elemento del bloque de mensajería unbounded_buffer.

_Type dequeue();

Valor devuelto

La carga del mensaje quitado de unbounded_buffer.

enqueue

Agrega un elemento al bloque de mensajería unbounded_buffer.

bool enqueue(
   _Type const&                 _Item
);

Parámetros

_Item
Elemento que se va a agregar.

Valor devuelto

true, si el elemento se ha aceptado; de lo contrario, false.

Devolución de llamada que notifica que se ha vinculado un nuevo destino a este bloque de mensajería unbounded_buffer.

virtual void link_target_notification(
   _Inout_ ITarget<_Type> *                 _PTarget
);

Parámetros

_PTarget
Puntero al destino recién vinculado.

propagate_message

Pasa de forma asincrónica un mensaje de un bloque ISource a este bloque de mensajería unbounded_buffer. Se invoca mediante el propagate método, cuando lo llama un bloque de origen.

virtual message_status propagate_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_Type> *                 _PSource
);

Parámetros

_PMessage
Un puntero al objeto message.

_PSource
Puntero al bloque de origen que ofrece el mensaje.

Valor devuelto

Una indicación message_status de lo que el destino decidió hacer con el mensaje.

propagate_output_messages

Coloca en message _PMessage este unbounded_buffer bloque de mensajería e intenta ofrecerlo a todos los destinos vinculados.

virtual void propagate_output_messages();

Comentarios

Si otro mensaje ya está por delante de este en unbounded_buffer, la propagación a destinos vinculados no se producirá hasta que se hayan aceptado o consumido mensajes anteriores. El primer destino vinculado correctamente accept o consume el mensaje toma posesión, y ningún otro destino puede a continuación obtener el mensaje.

process_input_messages

Coloca en message _PMessage este unbounded_buffer bloque de mensajería e intenta ofrecerlo a todos los destinos vinculados.

virtual void process_input_messages(
   _Inout_ message<_Type> *                 _PMessage
);

Parámetros

_PMessage
Un puntero al mensaje que se procesará.

release_message

Libera una reserva de mensajes anterior.

virtual void release_message(
   runtime_object_identity                 _MsgId
);

Parámetros

_MsgId
El valor runtime_object_identity del objeto message que se libera.

reserve_message

Reserva un mensaje ofrecido anteriormente por este bloque de mensajería unbounded_buffer.

virtual bool reserve_message(
   runtime_object_identity                 _MsgId
);

Parámetros

_MsgId
El runtime_object_identity del objeto message que se está reservando.

Valor devuelto

true si se ha reservado correctamente el mensaje; de lo contrario, false.

Comentarios

Después de llamar a reserve, si devuelve true, se debe llamar a consume o release para aceptar o liberar la propiedad del mensaje.

resume_propagation

Reanuda la propagación después de que se haya liberado una reserva.

virtual void resume_propagation();

send_message

Pasa de forma sincrónica un mensaje de un ISource bloque a este unbounded_buffer bloque de mensajería. Se invoca mediante el send método, cuando lo llama un bloque de origen.

virtual message_status send_message(
   _Inout_ message<_Type> *                 _PMessage,
   _Inout_ ISource<_Type> *                 _PSource
);

Parámetros

_PMessage
Un puntero al objeto message.

_PSource
Puntero al bloque de origen que ofrece el mensaje.

Valor devuelto

Una indicación message_status de lo que el destino decidió hacer con el mensaje.

supports_anonymous_source

Invalida el supports_anonymous_source método para indicar que este bloque puede aceptar mensajes ofrecidos por un origen que no está vinculado.

virtual bool supports_anonymous_source();

Valor devuelto

true porque el bloque no pospone los mensajes ofrecidos.

unbounded_buffer

Construye un bloque de mensajería 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
Función de filtro que determina si se deben aceptar los mensajes ofrecidos.

_PScheduler
El objeto Scheduler dentro del que se programa la tarea de propagación para el bloque de mensajería unbounded_buffer .

_PScheduleGroup
El objeto ScheduleGroup dentro del que se programa la tarea de propagación para el bloque de mensajería unbounded_buffer . El objeto Scheduler utilizado está implícito en el grupo de programación.

Comentarios

El runtime usa el programador predeterminado si no se especifican los parámetros _PScheduler o _PScheduleGroup .

El tipo filter_method es un functor con firma bool (_Type const &) invocada por este bloque de mensajería unbounded_buffer para determinar si debe aceptar o no un mensaje ofrecido.

~unbounded_buffer

Destruye el bloque de mensajería unbounded_buffer.

~unbounded_buffer();

Consulte también

concurrency (espacio de nombres)
overwrite_buffer (clase)
single_assignment (clase)