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.
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
_Type
El tipo de carga de los mensajes almacenados y propagados por el búfer.
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 . |
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 . |
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.
unbounded_buffer
Encabezado: agents.h
Espacio de nombres: simultaneidad
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
);
_MsgId
El valor runtime_object_identity
del objeto message
ofrecido.
Puntero al objeto message
del que el autor de la llamada tiene ahora la propiedad.
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
);
_MsgId
Valor runtime_object_identity
del objeto message
que se consumirá.
Puntero al objeto message
del que el autor de la llamada tiene ahora la propiedad.
Es similar a accept
, pero siempre va precedido de una llamada a reserve
.
Quita un elemento del bloque de mensajería unbounded_buffer
.
_Type dequeue();
La carga del mensaje quitado de unbounded_buffer
.
Agrega un elemento al bloque de mensajería unbounded_buffer
.
bool enqueue(
_Type const& _Item
);
_Item
Elemento que se va a agregar.
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
);
_PTarget
Puntero al destino recién vinculado.
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
);
_PMessage
Un puntero al objeto message
.
_PSource
Puntero al bloque de origen que ofrece el mensaje.
Una indicación message_status de lo que el destino decidió hacer con el mensaje.
Coloca en message
_PMessage
este unbounded_buffer
bloque de mensajería e intenta ofrecerlo a todos los destinos vinculados.
virtual void propagate_output_messages();
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.
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
);
_PMessage
Un puntero al mensaje que se procesará.
Libera una reserva de mensajes anterior.
virtual void release_message(
runtime_object_identity _MsgId
);
_MsgId
El valor runtime_object_identity
del objeto message
que se libera.
Reserva un mensaje ofrecido anteriormente por este bloque de mensajería unbounded_buffer
.
virtual bool reserve_message(
runtime_object_identity _MsgId
);
_MsgId
El runtime_object_identity
del objeto message
que se está reservando.
true
si se ha reservado correctamente el mensaje; de lo contrario, false
.
Después de llamar a reserve
, si devuelve true
, se debe llamar a consume
o release
para aceptar o liberar la propiedad del mensaje.
Reanuda la propagación después de que se haya liberado una reserva.
virtual void resume_propagation();
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
);
_PMessage
Un puntero al objeto message
.
_PSource
Puntero al bloque de origen que ofrece el mensaje.
Una indicación message_status de lo que el destino decidió hacer con el mensaje.
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();
true
porque el bloque no pospone los mensajes ofrecidos.
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
);
_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.
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.
Destruye el bloque de mensajería unbounded_buffer
.
~unbounded_buffer();
concurrency (espacio de nombres)
overwrite_buffer (clase)
single_assignment (clase)