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


Класс 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.)

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

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

ISource

ITarget

source_block

propagator_block

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 в противном случае.

Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим 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