Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Блок передачи сообщений 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. |
Открытые методы
| Имя | Описание |
|---|---|
| has_value | Проверяет, был ли этот single_assignment блок обмена сообщениями уже инициализирован значением. |
| значение | Возвращает ссылку на текущие полезные данные сообщения, хранящиеся в блоке single_assignment обмена сообщениями. |
Защищенные методы
| Имя | Описание |
|---|---|
| accept_message | Принимает сообщение, которое было предложено этим single_assignment блоком обмена сообщениями, возвращая копию сообщения вызывающему. |
| consume_message | Потребляет сообщение, которое ранее было предложено single_assignment и зарезервировано получателем, возвращая его копию вызывающему. |
| уведомление_о_цели_ссылки | Обратный вызов, уведомляющий о том, что новый целевой объект был связан с этим single_assignment блоком обмена сообщениями. |
| propagate_message | Асинхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока. |
| распространить_на_любые_цели | Размещает message _PMessage в этом блоке обмена сообщениями single_assignment и предлагает его всем связанным целям. |
| release_message | Освобождает предыдущее резервирование сообщений. (Переопределяет source_block::release_message.) |
| reserve_message | Резервирует сообщение, ранее предлагаемое этим single_assignment блоком обмена сообщениями. (Переопределяет source_block::reserve_message.) |
| возобновить распространение | Возобновляет распространение после освобождения бронирования. (Переопределяет source_block::resume_propagation.) |
| send_message | Синхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом send при вызове исходного блока. |
Замечания
Блок single_assignment обмена сообщениями распространяет копии своего сообщения на каждый целевой объект.
Дополнительные сведения см. в разделе "Блоки асинхронных сообщений".
Иерархия наследования
single_assignment
Требования
Заголовок: agents.h
Пространство имен: конкурентность
принять_сообщение
Принимает сообщение, которое было предложено этим single_assignment блоком обмена сообщениями, возвращая копию сообщения вызывающему.
virtual message<T>* accept_message(runtime_object_identity _MsgId);
Параметры
_MsgId
Предлагаемый runtime_object_identitymessage объект.
Возвращаемое значение
Указатель на объект message, право владения которым теперь переходит к вызывающему.
Замечания
Блок single_assignment обмена сообщениями возвращает копии сообщения в целевые объекты, а не передает права собственности на в настоящее время удерживаемое сообщение.
потребить_сообщение
Потребляет сообщение, которое ранее было предложено 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
Указатель на новый связанный целевой объект.
передать_сообщение
Асинхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом propagate при вызове исходного блока.
virtual message_status propagate_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Параметры
_PMessage
Указатель на объект message.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.
распроcтранить_на_любые_цели
message
_PMessage Помещает этот single_assignment блок обмена сообщениями и отправляет его всем связанным целевым объектам.
virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);
Параметры
_PMessage
Указатель на message, который стал собственностью этого single_assignment блока обмена сообщениями.
сообщение о выпуске
Освобождает предыдущее резервирование сообщений.
virtual void release_message(runtime_object_identity _MsgId);
Параметры
_MsgId
runtime_object_identity объекта message, который освобождается.
сообщение_о_резервировании
Резервирует сообщение, ранее предлагаемое этим single_assignment блоком обмена сообщениями.
virtual bool reserve_message(runtime_object_identity _MsgId);
Параметры
_MsgId
runtime_object_identity объекта message, который резервируется.
Возвращаемое значение
true если сообщение успешно забронировано, false в противном случае.
Замечания
После вызова reserve, если он возвращает true, должен быть вызван либо consume, либо release для принятия или освобождения владения сообщением.
возобновить_распространение
Возобновляет распространение после освобождения бронирования.
virtual void resume_propagation();
отправить_сообщение
Синхронно передает сообщение из ISource блока в этот single_assignment блок обмена сообщениями. Вызывается методом send при вызове исходного блока.
virtual message_status send_message(
_Inout_ message<T>* _PMessage,
_Inout_ ISource<T>* _PSource);
Параметры
_PMessage
Указатель на объект message.
_PSource
Указатель на исходный блок, предлагающий сообщение.
Возвращаемое значение
Указание состояния сообщения о том, что целевой объект решил сделать с сообщением.
единственное присваивание
Создает блок обмена сообщениями 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 обмена сообщениями.
См. также
Пространство имен параллелизм
Класс overwrite_buffer
Класс unbounded_buffer