Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Блок обмена сообщениями 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 | Уничтожает overwrite_buffer блок обмена сообщениями. |
Открытые методы
| Имя | Описание |
|---|---|
| has_value | Проверяет, имеет ли этот overwrite_buffer блок обмена сообщениями значение. |
| значение | Возвращает ссылку на текущую полезные данные сообщения, хранящегося в блоке overwrite_buffer обмена сообщениями. |
Защищенные методы
| Имя | Описание |
|---|---|
| accept_message | Принимает сообщение, которое было предложено этим overwrite_buffer блоком обмена сообщениями, возвращая копию сообщения вызывающему объекту. |
| consume_message | Использует сообщение, предлагаемое ранее блоком overwrite_buffer обмена сообщениями и зарезервированным целевым объектом, возвращая копию сообщения вызывающему объекту. |
| link_target_notification | Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим overwrite_buffer блоком обмена сообщениями. |
| propagate_message | Асинхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока. |
| propagate_to_any_targets | message _PMessage Помещает этот overwrite_buffer блок обмена сообщениями и предлагает его всем связанным целевым объектам. |
| release_message | Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.) |
| reserve_message | Резервирует сообщение, ранее предлагаемое этим overwrite_buffer блоком обмена сообщениями. (Переопределяет source_block::reserve_message.) |
| resume_propagation | Возобновляет распространение после освобождения резервирования. (Переопределяет source_block::resume_propagation.) |
| send_message | Синхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом send при вызове исходного блока. |
| supports_anonymous_source | Переопределяет метод supports_anonymous_source, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником. (Переопределения ITarget::supports_anonymous_source.) |
Замечания
Блок overwrite_buffer обмена сообщениями распространяет копии своего сохраненного сообщения на каждый из его целевых объектов.
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
overwrite_buffer
Требования
Заголовок: agents.h
Пространство имен: concurrency
accept_message
Принимает сообщение, которое было предложено этим overwrite_buffer блоком обмена сообщениями, возвращая копию сообщения вызывающему объекту.
virtual message<T>* accept_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Предлагаемый runtime_object_identity message объект.
Возвращаемое значение
Указатель на объект, на который вызывающий message объект теперь имеет право владения.
Замечания
Блок overwrite_buffer обмена сообщениями возвращает копии сообщения в целевые объекты, а не передает права собственности на текущее сообщение.
consume_message
Использует сообщение, предлагаемое ранее блоком 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 в противном случае.
link_target_notification
Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим overwrite_buffer блоком обмена сообщениями.
virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);
Параметры
_PTarget
Указатель на новый связанный целевой объект.
~overwrite_buffer
Уничтожает overwrite_buffer блок обмена сообщениями.
~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 блоком обмена сообщениями, чтобы определить, следует ли принимать предлагаемое сообщение.
propagate_message
Асинхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Параметры
_PMessage
Указатель на объект message.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
propagate_to_any_targets
message _PMessage Помещает этот overwrite_buffer блок обмена сообщениями и предлагает его всем связанным целевым объектам.
virtual void propagate_to_any_targets(_Inout_ message<T>* _PMessage);
Параметры
_PMessage
Указатель на message объект, которому он overwrite_buffer принадлежит.
Замечания
Этот метод перезаписывает текущее сообщение в overwrite_buffer новом принятом сообщении _PMessage.
send_message
Синхронно передает сообщение из ISource блока в этот overwrite_buffer блок обмена сообщениями. Вызывается методом send при вызове исходного блока.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Параметры
_PMessage
Указатель на объект message.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Message_status указание того, что целевой объект решил сделать с сообщением.
supports_anonymous_source
Переопределяет метод supports_anonymous_source, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником.
virtual bool supports_anonymous_source();
Возвращаемое значение
true так как блок не откладывает предлагаемые сообщения.
release_message
Освобождает предыдущее резервирование сообщений.
virtual void release_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Объект runtime_object_identity , message который освобождается.
reserve_message
Резервирует сообщение, ранее предлагаемое этим overwrite_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();
значение
Возвращает ссылку на текущую полезные данные сообщения, хранящегося в блоке overwrite_buffer обмена сообщениями.
T value();
Возвращаемое значение
Полезные данные текущего сохраненного сообщения.
Замечания
Значение, хранящееся в объекте overwrite_buffer , может измениться сразу после возврата этого метода. Этот метод будет ожидать, пока сообщение не будет получено, если в данный момент сообщение не хранится в .overwrite_buffer
См. также
Пространство имен concurrency
Класс unbounded_buffer
Класс single_assignment