Активные объекты имеют свои собственные потоки выполнения.
Основой активного объекта является класс Cntm::ActiveObject, выполняющий операции по созданию потоков активного объекта и их автоматическому завершению при уничтожении объекта. Активные объекты являются ссылочными объектами. Важной особенностью активных объектов является то, что поток активного объекта не хранит ссылок на сам объект (в отличие от асинхронных процедур), т.е. работа потока не препятствует уничтожению объекта. Когда на объект не осталось ссылок, он посылает всем своим потокам сигнал завершения и ожидает их завершения. Только после завершения всех потоков будут вызваны деструкторы, а для классов ...RefBaseEx - методы OnReleaseInstance().
Класс Cntm::ActiveObject является основой, но не может служить базовым классом, т.к. не содержит реализации подсчета ссылок. Для создания класса активного объекта он должен быть унаследован от одного из четырех базовых классов: Cntm::ActiveRefBase, Cntm::ActiveRefBaseEx, Cntm::ActiveSynchroRefBase или Cntm::ActiveSynchroRefBaseEx. Первые два объединяют свойства активных объектов с соответствующей реализацие подсчета ссылок, вторые - добавляют к этому средства синхронизации.
Поток можно создавать либо через средства Cntm::ActiveObject либо с помощью класса потока активного объекта - Cntm::ActiveThread. Поток активного объекта является единицей выполнения (наследует Cntm::ExecutionUnit), поэтому взаимодействие с потоком происходит через хэндл потока - класс Cntm::ActiveThreadHandle. Хэндл позволяет остановить поток до уничтожения активного объекта.
В потоковых методах для защиты от перехода объекта в удаляемое состояние следует применять Using-объекты - Cntm::Using, Cntm::UsingSync и Cntm::UsingReentrantSync . Последние 2, а также классы Cntm::Sync и Cntm::ReentrantSync могут применяться активными синхрообъектами для входа в свое синхропространство.
Классы | |
class | Cntm::ActiveObject |
Активный объект - это объект, имеющий свои собственные потоки выполнения. Подробнее... | |
class | Cntm::ActiveRefBase |
Базовый класс для активных объектов. Подробнее... | |
class | Cntm::ActiveRefBaseEx |
Базовый класс для активных объектов. Подробнее... | |
class | Cntm::ActiveSynchroRefBase |
Базовый класс для активных объектов. Подробнее... | |
class | Cntm::ActiveSynchroRefBaseEx |
Базовый класс для активных объектов. Подробнее... | |
class | Cntm::ActiveThread |
Класс потока активного объекта. Подробнее... | |
class | Cntm::ActiveThreadHandle |
Хэндл потока активного объекта. Подробнее... | |
class | Cntm::ActiveThreadTerminatingSignal |
Класс сигнала, использующегося в качестве исключения при завершении потока активного объекта. Подробнее... |
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |