Класс 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
Принимает сообщение, которое было предложено этим unbounded_buffer
блоком обмена сообщениями, передавая владельца вызывающему объекту.
virtual message<_Type> * accept_message(
runtime_object_identity _MsgId
);
_MsgId
Предлагаемый runtime_object_identity
message
объект.
Указатель на объект, на который вызывающий 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
в противном случае.
Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим unbounded_buffer
блоком обмена сообщениями.
virtual void link_target_notification(
_Inout_ ITarget<_Type> * _PTarget
);
_PTarget
Указатель на новый связанный целевой объект.
Асинхронно передает сообщение из ISource
блока в этот unbounded_buffer
блок обмена сообщениями. Вызывается методом propagate
при вызове исходного блока.
virtual message_status propagate_message(
_Inout_ message<_Type> * _PMessage,
_Inout_ ISource<_Type> * _PSource
);
_PMessage
Указатель на объект message
.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Message_status указание того, что целевой объект решил сделать с сообщением.
message
_PMessage
Помещает этот unbounded_buffer
блок обмена сообщениями и пытается предложить его всем связанным целевым объектам.
virtual void propagate_output_messages();
Если другое сообщение уже впереди этого сообщения в unbounded_buffer
этом, распространение на связанные целевые объекты не будет происходить до тех пор, пока не будут приняты или использованы предыдущие сообщения. Первый связанный целевой объект успешно accept
или consume
сообщение получает владение, а другой целевой объект затем не может получить сообщение.
message
_PMessage
Помещает этот unbounded_buffer
блок обмена сообщениями и пытается предложить его всем связанным целевым объектам.
virtual void process_input_messages(
_Inout_ message<_Type> * _PMessage
);
_PMessage
Указатель на сообщение, которое необходимо обработать.
Освобождает предыдущее резервирование сообщений.
virtual void release_message(
runtime_object_identity _MsgId
);
_MsgId
Объект runtime_object_identity
, message
который освобождается.
Резервирует сообщение, ранее предлагаемое этим unbounded_buffer
блоком обмена сообщениями.
virtual bool reserve_message(
runtime_object_identity _MsgId
);
_MsgId
Зарезервированный runtime_object_identity
message
объект.
true
Значение , если сообщение успешно зарезервировано, false
в противном случае.
После reserve
вызова, если он возвращается true
, consume
release
либо должен вызываться для принятия или освобождения владения сообщением.
Возобновляет распространение после освобождения резервирования.
virtual void resume_propagation();
Синхронно передает сообщение из 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
, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником.
virtual bool supports_anonymous_source();
true
так как блок не откладывает предлагаемые сообщения.
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();
Пространство имен concurrency
Класс overwrite_buffer
Класс single_assignment