Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
_Tipo
El tipo de carga de los mensajes almacenados y propagados por el búfer.
Miembros
Constructores públicos
| Nombre | Descripción |
|---|---|
| unbounded_buffer | Sobrecargado 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 |
|---|---|
| aceptar_mensaje | 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 | Callback que notifica que un nuevo destino ha sido vinculado a este bloque de mensajería unbounded_buffer. |
| process_input_messages | Coloca el message_PMessage en este bloque de mensajería unbounded_buffer e intenta ofrecerlo a todos los objetivos 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 el message_PMessage en este bloque de mensajería unbounded_buffer e intenta ofrecerlo a todos los objetivos vinculados. (Invalida source_block::propagate_output_messages.) |
| release_message | Libera una reserva previa de mensaje. (Invalida source_block::release_message). |
| mensaje_de_reserva | 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
unbounded_buffer
Requisitos
Encabezado: agents.h
Espacio de nombres: simultaneidad
mensaje_de_aceptación
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.
consumir_mensaje
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 que fue retirado 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.
notificación_de_destino_de_enlace
Callback que notifica que un nuevo destino ha sido vinculado a este bloque de mensajería unbounded_buffer.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
Parámetros
_PTarget
Puntero al objetivo recién vinculado.
propagar_mensaje
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.
propagar_mensajes_de_salida
Coloca el message_PMessage en este unbounded_buffer bloque de mensajería y lo intenta ofrecer 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.
procesar_mensajes_de_entrada
Coloca el message_PMessage en este bloque de mensajería unbounded_buffer e intenta ofrecerlo a todos los objetivos vinculados.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Parámetros
_PMessage
Un puntero al mensaje que se procesará.
mensaje_de_lanzamiento
Libera una reserva previa de mensaje.
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();
enviar_mensaje
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.
soporta_fuente_anónima
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.
búfer sin límites
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 tareas.
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.
~búfer ilimitado
Destruye el bloque de mensajería unbounded_buffer.
~unbounded_buffer();
Consulte también
espacio de nombres de concurrencia
Clase overwrite_buffer
Clase single_assignment