Поделиться через


Класс overwrite_buffer

Блок обмена сообщениями overwrite_buffer — это упорядоченный блок propagator_block с несколькими источниками и несколькими целями, который может хранить одно сообщение в один момент времени. Новые сообщения перезаписывают предыдущие.

Синтаксис

template<class T>
class overwrite_buffer : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Параметры

T
Тип полезной нагрузки сообщений, которые сохраняются и распространяются буфером.

Участники

Открытые конструкторы

Имя Описание
буфер_перезаписи Перегружен. Создает блок обмена сообщениями overwrite_buffer.
Деструктор ~overwrite_buffer Уничтожает блок сообщений overwrite_buffer.

Открытые методы

Имя Описание
has_value Проверяет, имеет ли этот overwrite_buffer блок обмена сообщениями значение.
значение Возвращает ссылку на текущие полезные данные сообщения, хранящиеся в блоке overwrite_buffer обмена сообщениями.

Защищенные методы

Имя Описание
accept_message Принимает сообщение, которое было предложено этим overwrite_buffer блоком обмена сообщениями, возвращая копию сообщения вызывающему.
consume_message Получает сообщение, ранее предложенное блоком overwrite_buffer обмена сообщениями и зарезервированное целевым объектом, при этом копия сообщения возвращается вызывающему объекту.
уведомление_о_цели_ссылки Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим overwrite_buffer блоком обмена сообщениями.
propagate_message Асинхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.
распространить_на_любые_цели Размещает message _PMessage в этом блоке обмена сообщениями overwrite_buffer и предлагает его всем связанным целям.
release_message Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.)
reserve_message Резервирует сообщение, ранее предлагаемое этим overwrite_buffer блоком обмена сообщениями. (Переопределяет source_block::reserve_message.)
возобновить распространение Возобновляет распространение после освобождения бронирования. (Переопределяет source_block::resume_propagation.)
send_message Синхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом send при вызове исходного блока.
поддерживает_анонимный_источник Переопределяет метод supports_anonymous_source, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником. (Переопределяет ITarget::supports_anonymous_source.)

Замечания

Блок overwrite_buffer обмена сообщениями распространяет копии своего сохраненного сообщения на каждый из его целевых объектов.

Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".

Иерархия наследования

ISource

ITarget

source_block

блок распространителя

overwrite_buffer

Требования

Заголовок: agents.h

Пространство имен: конкурентность

принять_сообщение

Принимает сообщение, которое было предложено этим overwrite_buffer блоком обмена сообщениями, возвращая копию сообщения вызывающему.

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

Параметры

_MsgId
Предлагаемый runtime_object_identitymessage объект.

Возвращаемое значение

Указатель на объект message, право владения которым теперь переходит к вызывающему.

Замечания

Блок overwrite_buffer обмена сообщениями возвращает копии сообщения в целевые объекты, а не передает права собственности на в настоящее время удерживаемое сообщение.

потребить_сообщение

Забирает сообщение, ранее предложенное блоком overwrite_buffer обмена сообщениями и зарезервированное целевым объектом, возвращая копию сообщения вызывающему объекту.

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

Параметры

_MsgId
runtime_object_identity объекта message, который используется.

Возвращаемое значение

Указатель на объект message, право владения которым теперь переходит к вызывающему.

Замечания

Аналогично accept, но всегда вызывается после reserve.

has_value

Проверяет, имеет ли этот overwrite_buffer блок обмена сообщениями значение.

bool has_value() const;

Возвращаемое значение

true если блок получил значение, false в противном случае.

Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим overwrite_buffer блоком обмена сообщениями.

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

Параметры

_PTarget
Указатель на новый связанный целевой объект.

~перезаписать_буфер

Уничтожает блок сообщений overwrite_buffer.

~overwrite_buffer();

перезаписать_буфер

Создает блок обмена сообщениями 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);

Параметры

_Фильтр
Функция фильтра, которая определяет, следует ли принимать предлагаемые сообщения.

_PScheduler
Объект Scheduler , в котором запланирована задача распространения для блока обмена сообщениями overwrite_buffer .

_PScheduleGroup
Объект ScheduleGroup , в котором запланирована задача распространения для блока обмена сообщениями overwrite_buffer . Используемый объект Scheduler подразумевается группой расписаний.

Замечания

Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler или _PScheduleGroup .

Тип filter_method — это functor с подписью bool (T const &) , которая вызывается этим overwrite_buffer блоком обмена сообщениями, чтобы определить, следует ли принимать предлагаемое сообщение.

передать_сообщение

Асинхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.

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

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.

распроcтранить_на_любые_цели

Размещает message _PMessage в этом блоке обмена сообщениями overwrite_buffer и предлагает его всем связанным целям.

virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);

Параметры

_PMessage
Указатель на объект message, владением которым overwrite_buffer завладел.

Замечания

Этот метод перезаписывает текущее сообщение в overwrite_buffer новом принятом сообщении _PMessage.

отправить_сообщение

Синхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом send при вызове исходного блока.

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

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.

поддерживает_анонимный_источник

Переопределяет метод supports_anonymous_source, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником.

virtual bool supports_anonymous_source();

Возвращаемое значение

true так как блок не откладывает предлагаемые сообщения.

сообщение о выпуске

Освобождает предыдущее резервирование сообщений.

virtual void release_message(runtime_object_identity _MsgId);

Параметры

_MsgId
runtime_object_identity объекта message, который освобождается.

сообщение_о_резервировании

Резервирует сообщение, ранее предлагаемое этим overwrite_buffer блоком обмена сообщениями.

virtual bool reserve_message(runtime_object_identity _MsgId);

Параметры

_MsgId
runtime_object_identity объекта message, который резервируется.

Возвращаемое значение

true если сообщение успешно забронировано, false в противном случае.

Замечания

После вызова reserve, если он возвращает true, должен быть вызван либо consume, либо release для принятия или освобождения владения сообщением.

возобновить_распространение

Возобновляет распространение после освобождения бронирования.

virtual void resume_propagation();

значение

Возвращает ссылку на текущие полезные данные сообщения, хранящиеся в блоке overwrite_buffer обмена сообщениями.

T value();

Возвращаемое значение

Полезная нагрузка в настоящее время сохраненного сообщения.

Замечания

Значение, хранящееся в объекте overwrite_buffer , может измениться сразу после возврата этого метода. Этот метод будет ожидать, пока сообщение не будет получено, если в данный момент сообщение не хранится в .overwrite_buffer

См. также

Пространство имен параллелизм
Класс unbounded_buffer
Класс single_assignment