Класс unbounded_buffer
Блок обмена сообщениями unbounded_buffer
— это упорядоченный блок propagator_block
с несколькими целями и несколькими источниками, который может хранить неограниченное число сообщений.
Синтаксис
template<
class _Type
>
class unbounded_buffer : public propagator_block<multi_link_registry<ITarget< _Type>>, multi_link_registry<ISource< _Type>>>;
Параметры
_Тип
Тип полезных данных сообщений, хранящихся и распространяемых буфером.
Участники
Открытые конструкторы
Имя | Описание |
---|---|
unbounded_buffer | Перегружен. unbounded_buffer Создает блок обмена сообщениями. |
Деструктор ~unbounded_buffer | Уничтожает unbounded_buffer блок обмена сообщениями. |
Открытые методы
Имя | Описание |
---|---|
dequeue | Удаляет элемент из unbounded_buffer блока обмена сообщениями. |
enqueue | Добавляет элемент в unbounded_buffer блок обмена сообщениями. |
Защищенные методы
Имя | Описание |
---|---|
accept_message | Принимает сообщение, которое было предложено этим unbounded_buffer блоком обмена сообщениями, передавая владельца вызывающему объекту. |
consume_message | Использует сообщение, предлагаемое ранее блоком unbounded_buffer обмена сообщениями и зарезервированным целевым объектом, передавая владельца вызывающему объекту. |
link_target_notification | Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим unbounded_buffer блоком обмена сообщениями. |
process_input_messages | message _PMessage Помещает этот unbounded_buffer блок обмена сообщениями и пытается предложить его всем связанным целевым объектам. |
propagate_message | Асинхронно передает сообщение из ISource блока в этот unbounded_buffer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока. |
propagate_output_messages | message _PMessage Помещает этот unbounded_buffer блок обмена сообщениями и пытается предложить его всем связанным целевым объектам. (Переопределяет source_block::p ropagate_output_messages.) |
release_message | Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.) |
reserve_message | Резервирует сообщение, ранее предлагаемое этим unbounded_buffer блоком обмена сообщениями. (Переопределяет source_block::reserve_message.) |
resume_propagation | Возобновляет распространение после освобождения резервирования. (Переопределяет source_block::resume_propagation.) |
send_message | Синхронно передает сообщение из ISource блока в этот unbounded_buffer блок обмена сообщениями. Вызывается методом send при вызове исходного блока. |
supports_anonymous_source | Переопределяет метод supports_anonymous_source , чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником. (Переопределения ITarget::supports_anonymous_source.) |
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
unbounded_buffer
Требования
Заголовок: agents.h
Пространство имен: concurrency
accept_message
Принимает сообщение, которое было предложено этим unbounded_buffer
блоком обмена сообщениями, передавая владельца вызывающему объекту.
virtual message<_Type> * accept_message(
runtime_object_identity _MsgId
);
Параметры
_MsgId
Предлагаемый runtime_object_identity
message
объект.
Возвращаемое значение
Указатель на объект, на который вызывающий message
объект теперь имеет право владения.
consume_message
Использует сообщение, предлагаемое ранее блоком unbounded_buffer
обмена сообщениями и зарезервированным целевым объектом, передавая владельца вызывающему объекту.
virtual message<_Type> * consume_message(
runtime_object_identity _MsgId
);
Параметры
_MsgId
Используемый runtime_object_identity
message
объект.
Возвращаемое значение
Указатель на объект, на который вызывающий message
объект теперь имеет право владения.
Замечания
accept
Аналогично, но всегда предшествует вызовуreserve
.
вывести из очереди
Удаляет элемент из unbounded_buffer
блока обмена сообщениями.
_Type dequeue();
Возвращаемое значение
Полезные данные сообщения удалены из unbounded_buffer
.
поставить в очередь
Добавляет элемент в unbounded_buffer
блок обмена сообщениями.
bool enqueue(
_Type const& _Item
);
Параметры
_Пункт
Добавляемый элемент.
Возвращаемое значение
true
Значение , если элемент был принят, false
в противном случае.
link_target_notification
Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим unbounded_buffer
блоком обмена сообщениями.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
Параметры
_PTarget
Указатель на новый связанный целевой объект.
propagate_message
Асинхронно передает сообщение из ISource
блока в этот unbounded_buffer
блок обмена сообщениями. Вызывается методом propagate
при вызове исходного блока.
virtual message_status propagate_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _PSource
);
Параметры
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
propagate_output_messages
message
_PMessage
Помещает этот unbounded_buffer
блок обмена сообщениями и пытается предложить его всем связанным целевым объектам.
virtual void propagate_output_messages();
Замечания
Если другое сообщение уже впереди этого сообщения в unbounded_buffer
этом, распространение на связанные целевые объекты не будет происходить до тех пор, пока не будут приняты или использованы предыдущие сообщения. Первый связанный целевой объект успешно accept
или consume
сообщение получает владение, а другой целевой объект затем не может получить сообщение.
process_input_messages
message
_PMessage
Помещает этот unbounded_buffer
блок обмена сообщениями и пытается предложить его всем связанным целевым объектам.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
Параметры
_PMessage
Указатель на сообщение, которое необходимо обработать.
release_message
Освобождает предыдущее резервирование сообщений.
virtual void release_message(
runtime_object_identity _MsgId
);
Параметры
_MsgId
Объект runtime_object_identity
, message
который освобождается.
reserve_message
Резервирует сообщение, ранее предлагаемое этим unbounded_buffer
блоком обмена сообщениями.
virtual bool reserve_message(
runtime_object_identity _MsgId
);
Параметры
_MsgId
Зарезервированный runtime_object_identity
message
объект.
Возвращаемое значение
true
Значение , если сообщение успешно зарезервировано, false
в противном случае.
Замечания
После reserve
вызова, если он возвращается true
, consume
release
либо должен вызываться для принятия или освобождения владения сообщением.
resume_propagation
Возобновляет распространение после освобождения резервирования.
virtual void resume_propagation();
send_message
Синхронно передает сообщение из ISource
блока в этот unbounded_buffer
блок обмена сообщениями. Вызывается методом send
при вызове исходного блока.
virtual message_status send_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _PSource
);
Параметры
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
supports_anonymous_source
Переопределяет метод supports_anonymous_source
, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником.
virtual bool supports_anonymous_source();
Возвращаемое значение
true
так как блок не откладывает предлагаемые сообщения.
unbounded_buffer
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
);
Параметры
_Фильтр
Функция фильтра, которая определяет, следует ли принимать предлагаемые сообщения.
_PScheduler
Объект Scheduler
, в котором запланирована задача распространения для блока обмена сообщениями unbounded_buffer
.
_PScheduleGroup
Объект ScheduleGroup
, в котором запланирована задача распространения для блока обмена сообщениями unbounded_buffer
. Используемый объект Scheduler
подразумевается группой расписаний.
Замечания
Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler
или _PScheduleGroup
.
Тип filter_method
— это functor с подписью bool (_Type const &)
, которая вызывается этим unbounded_buffer
блоком обмена сообщениями, чтобы определить, следует ли принимать предлагаемое сообщение.
~unbounded_buffer
Уничтожает unbounded_buffer
блок обмена сообщениями.
~unbounded_buffer();
См. также
Пространство имен concurrency
Класс overwrite_buffer
Класс single_assignment