Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Блок обмена сообщениями 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