Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Блок обмена сообщениями 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 обмена сообщениями и зарезервированное целевым объектом, передавая право собственности вызывающему объекту. |
| уведомление_о_цели_ссылки | Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим unbounded_buffer блоком обмена сообщениями. |
| process_input_messages | Помещает message_PMessage в этот unbounded_buffer блок обмена сообщениями и пытается предложить его всем связанным целям. |
| propagate_message | Асинхронно передает сообщение из ISource блока в этот unbounded_buffer блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока. |
| распространить_выходные_сообщения | Помещает message_PMessage в этот unbounded_buffer блок обмена сообщениями и пытается предложить его всем связанным целям. (Переопределяет source_block::propagate_output_messages.) |
| release_message | Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.) |
| reserve_message | Резервирует сообщение, ранее предлагаемое этим unbounded_buffer блоком обмена сообщениями. (Переопределяет source_block::reserve_message.) |
| возобновить распространение | Возобновляет распространение после освобождения бронирования. (Переопределяет source_block::resume_propagation.) |
| send_message | Синхронно передает сообщение из ISource блока в этот unbounded_buffer блок обмена сообщениями. Вызывается методом send при вызове исходного блока. |
| поддерживает_анонимный_источник | Переопределяет метод supports_anonymous_source, чтобы указать, что данный блок может принимать сообщения, предоставляемые ему несвязанным источником. (Переопределяет ITarget::supports_anonymous_source.) |
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
unbounded_buffer
Требования
Заголовок: agents.h
Пространство имен: конкурентность
принять_сообщение
Принимает сообщение, которое было предложено этим unbounded_buffer блоком обмена сообщениями, передавая управление вызывающему.
virtual message<_Type> * accept_message(
runtime_object_identity _MsgId
);
Параметры
_MsgId
Предлагаемый runtime_object_identitymessage объект.
Возвращаемое значение
Указатель на объект 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_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
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.
поддерживает_анонимный_источник
Переопределяет метод 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.
~unbounded_buffer();
См. также
Пространство имен параллелизм
Класс overwrite_buffer
Класс single_assignment