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


Класс ISource

Класс ISource является интерфейсом для всех блоков источников. Блоки источников распространяют сообщения в блоки ITarget.

Синтаксис

template<class T>
class ISource;

Параметры

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

Участники

Общедоступные typedefы

Имя Описание
source_type Псевдоним типа для T.

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

Имя Описание
~ISource Деструктор Уничтожает ISource объект.

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

Имя Описание
принимать При переопределении в производном классе принимает сообщение, которое было предложено этим ISource блоком, передавая владение вызывающему объекту.
получить_ссылку При переопределении в производном классе получает количество ссылок в этом ISource блоке, чтобы предотвратить удаление.
потреблять При переопределении в производном классе использует сообщение, ранее предлагаемое этим ISource блоком, и успешно зарезервировано целевым объектом, передавая владение вызывающему объекту.
link_target При переопределении в производном классе связывает целевой блок с этим ISource блоком.
релиз При переопределении в производном классе освобождает предыдущее успешное резервирование сообщений.
release_ref При переопределении в производном классе освобождает количество ссылок в этом ISource блоке.
резерв При переопределении в производном классе резервирует сообщение, ранее предлагаемое этим ISource блоком.
unlink_target При переопределении в производном классе разрывает связь целевого блока с этим ISource блоком, если он был связан ранее.
unlink_targets При переопределении в производном классе разрывает связь всех целевых блоков с этим ISource блоком.

Замечания

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

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

ISource

Требования

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

Пространство имен: конкурентность

принять

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

virtual message<T>* accept(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Параметры

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

_PTarget
Указатель на целевой блок, который вызывает метод accept.

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

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

Замечания

Метод accept вызывается этим целевым объектом, когда ISource блок предлагает сообщение. Указатель сообщения, который возвращается, может отличаться от того, который передан в метод propagate блока ITarget, если источник решит сделать копию сообщения.

acquire_ref

При переопределении в производном классе получает количество ссылок в этом ISource блоке, чтобы предотвратить удаление.

virtual void acquire_ref(_Inout_ ITarget<T>* _PTarget) = 0;

Параметры

_PTarget
Указатель на целевой блок, вызывающий этот метод.

Замечания

Этот метод вызывается объектом ITarget, который связывается с этим источником во время метода link_target.

потреблять

При переопределении в производном классе использует сообщение, ранее предлагаемое этим ISource блоком, и успешно зарезервировано целевым объектом, передавая владение вызывающему объекту.

virtual message<T>* consume(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Параметры

_MsgId
Зарезервированный runtime_object_identitymessage объект.

_PTarget
Указатель на целевой блок, который вызывает метод consume.

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

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

Замечания

Метод consume аналогичен accept, но всегда должен использоваться после вызова reserve, который возвратил true.

~ISource

Уничтожает ISource объект.

virtual ~ISource();

При переопределении в производном классе связывает целевой блок с этим ISource блоком.

virtual void link_target(_Inout_ ITarget<T>* _PTarget) = 0;

Параметры

_PTarget
Указатель на целевой блок, связанный с этим ISource блоком.

релиз

При переопределении в производном классе освобождает предыдущее успешное резервирование сообщений.

virtual void release(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Параметры

_MsgId
Зарезервированный runtime_object_identitymessage объект.

_PTarget
Указатель на целевой блок, который вызывает метод release.

release_ref

При переопределении в производном классе освобождает количество ссылок в этом ISource блоке.

virtual void release_ref(_Inout_ ITarget<T>* _PTarget) = 0;

Параметры

_PTarget
Указатель на целевой блок, вызывающий этот метод.

Замечания

Этот метод вызывается ITarget объектом, который не связан с этим источником. Исходный блок может освободить все ресурсы, зарезервированные для целевого блока.

резерв

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

virtual bool reserve(
    runtime_object_identity _MsgId,
    _Inout_ ITarget<T>* _PTarget) = 0;

Параметры

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

_PTarget
Указатель на целевой блок, который вызывает метод reserve.

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

true если сообщение успешно забронировано, false в противном случае. Резервирования могут завершаться неудачей по ряду причин, включая следующие: сообщение уже было зарезервировано или принято другим целевым объектом, источник может отклонять резервирования и т. п.

Замечания

После вызова reserve, если оно выполнено успешно, необходимо вызвать либо consume либо release , чтобы принять или отказаться от владения сообщением соответственно.

При переопределении в производном классе разрывает связь целевого блока с этим ISource блоком, если он был связан ранее.

virtual void unlink_target(_Inout_ ITarget<T>* _PTarget) = 0;

Параметры

_PTarget
Указатель на целевой блок, не связываемый с этим ISource блоком.

При переопределении в производном классе разрывает связь всех целевых блоков с этим ISource блоком.

virtual void unlink_targets() = 0;

См. также

Пространство имен параллелизм
Класс ITarget