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


Класс single_assignment

Блок обмена сообщениями single_assignment — это упорядоченный блок propagator_block с несколькими источниками и несколькими целями, который может хранить один объект message с однократной записью.

Синтаксис

template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

Параметры

T
Тип полезных данных сообщения, хранящегося и распространяемого буфером.

Участники

Открытые конструкторы

Имя Описание
single_assignment Перегружен. Создает блок обмена сообщениями single_assignment .
Деструктор ~single_assignment Уничтожает single_assignment блок обмена сообщениями.

Открытые методы

Имя Описание
has_value Проверяет, инициализирован ли этот single_assignment блок обмена сообщениями со значением.
значение Возвращает ссылку на текущую полезные данные сообщения, хранящегося в блоке single_assignment обмена сообщениями.

Защищенные методы

Имя Описание
accept_message Принимает сообщение, которое было предложено этим single_assignment блоком обмена сообщениями, возвращая копию сообщения вызывающему объекту.
consume_message Использует сообщение, которое ранее было предложено single_assignment целевым объектом и зарезервировано, возвращая копию сообщения вызывающему объекту.
link_target_notification Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим single_assignment блоком обмена сообщениями.
propagate_message Асинхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.
propagate_to_any_targets message _PMessage Помещает этот single_assignment блок обмена сообщениями и предлагает его всем связанным целевым объектам.
release_message Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.)
reserve_message Резервирует сообщение, ранее предлагаемое этим single_assignment блоком обмена сообщениями. (Переопределяет source_block::reserve_message.)
resume_propagation Возобновляет распространение после освобождения резервирования. (Переопределяет source_block::resume_propagation.)
send_message Синхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом send при вызове исходного блока.

Замечания

Блок single_assignment обмена сообщениями распространяет копии своего сообщения на каждый целевой объект.

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

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

ISource

ITarget

source_block

propagator_block

single_assignment

Требования

Заголовок: agents.h

Пространство имен: concurrency

accept_message

Принимает сообщение, которое было предложено этим single_assignment блоком обмена сообщениями, возвращая копию сообщения вызывающему объекту.

virtual message<T>* accept_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Предлагаемый runtime_object_identity message объект.

Возвращаемое значение

Указатель на объект, на который вызывающий message объект теперь имеет право владения.

Замечания

Блок single_assignment обмена сообщениями возвращает копии сообщения в целевые объекты, а не передает права собственности на текущее сообщение.

consume_message

Использует сообщение, которое ранее было предложено single_assignment целевым объектом и зарезервировано, возвращая копию сообщения вызывающему объекту.

virtual message<T>* consume_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Используемый runtime_object_identity message объект.

Возвращаемое значение

Указатель на объект, на который вызывающий message объект теперь имеет право владения.

Замечания

acceptАналогично, но всегда предшествует вызовуreserve.

has_value

Проверяет, инициализирован ли этот single_assignment блок обмена сообщениями со значением.

bool has_value() const;

Возвращаемое значение

true Значение, если блок получил значение, false в противном случае.

Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим single_assignment блоком обмена сообщениями.

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

Параметры

_PTarget
Указатель на новый связанный целевой объект.

propagate_message

Асинхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом 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 Помещает этот single_assignment блок обмена сообщениями и предлагает его всем связанным целевым объектам.

virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);

Параметры

_PMessage
Указатель на message то, что этот single_assignment блок обмена сообщениями взял на себя ответственность.

release_message

Освобождает предыдущее резервирование сообщений.

virtual void release_message(runtime_object_identity _MsgId);

Параметры

_MsgId
Объект runtime_object_identity , message который освобождается.

reserve_message

Резервирует сообщение, ранее предлагаемое этим single_assignment блоком обмена сообщениями.

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 блока в этот single_assignment блок обмена сообщениями. Вызывается методом send при вызове исходного блока.

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

Параметры

_PMessage
Указатель на объект message.

_PSource
Указатель на исходный блок, предлагающий сообщение.

Возвращаемое значение

Message_status указание того, что целевой объект решил сделать с сообщением.

single_assignment

Создает блок обмена сообщениями single_assignment .

single_assignment();

single_assignment(
    filter_method const& _Filter);

single_assignment(
    Scheduler& _PScheduler);

single_assignment(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

single_assignment(
    ScheduleGroup& _PScheduleGroup);

single_assignment(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

Параметры

_Фильтр
Функция фильтра, которая определяет, следует ли принимать предлагаемые сообщения.

_PScheduler
Объект Scheduler , в котором запланирована задача распространения для блока обмена сообщениями single_assignment .

_PScheduleGroup
Объект ScheduleGroup , в котором запланирована задача распространения для блока обмена сообщениями single_assignment . Используемый объект Scheduler подразумевается группой расписаний.

Замечания

Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler или _PScheduleGroup .

Тип filter_method — это functor с подписью bool (T const &) , которая вызывается этим single_assignment блоком обмена сообщениями, чтобы определить, следует ли принимать предлагаемое сообщение.

~single_assignment

Уничтожает single_assignment блок обмена сообщениями.

~single_assignment();

значение

Возвращает ссылку на текущую полезные данные сообщения, хранящегося в блоке single_assignment обмена сообщениями.

T const& value();

Возвращаемое значение

Полезные данные сохраненного сообщения.

Замечания

Этот метод будет ждать, пока сообщение не будет получено, если сообщение в настоящее время не хранится в блоке single_assignment обмена сообщениями.

См. также

Пространство имен concurrency
Класс overwrite_buffer
Класс unbounded_buffer