Класс 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
обмена сообщениями распространяет копии своего сообщения на каждый целевой объект.
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
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
в противном случае.
link_target_notification
Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим 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