ActiveSynchroRefBaseEx.h

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 #ifndef CNTM_ACTIVESYNCHROREFBASEEX_H
00015 #define CNTM_ACTIVESYNCHROREFBASEEX_H
00016 #include <Cntm/Synchro/SynchroRefBaseEx.h>
00017 #include <Cntm/ActiveObjects/ActiveObject.h>
00018 
00019 namespace Cntm
00020 {
00021 
00022         /**
00023          * Базовый класс для активных объектов. Объединяет средства работы с потоками, предоставляемые классом Cntm::ActiveObject, синхронизации и расширенного подсчета ссылок, предоставляемые классом Cntm::SynchroRefBase. См. описания базовых классов, а также класса Cntm::SynchroSpace.
00024          * 
00025          * Данный класс обеспечивает многопоточность.
00026          * @author Овсеевич Р.
00027          * \ingroup ActiveObjects
00028          */
00029         class ActiveSynchroRefBaseEx: public SynchroRefBaseEx, public ActiveObject
00030         {
00031         protected:
00032                         
00033                 /**
00034                  * Конструктор используется, когда операция создания синхрообъекта уже выполняется внутри пространства, к которому будет принадлежать новый объект. Если синхропространство не указано, то будет использовано главное синхропространство (т.о. если в программе используется только главное синхропространство, то нет необходимости указывать его явно).
00035                  * 
00036                  * @param Space - (опционально) используется для задания синхропространства, к которому будет принадлежать создаваемый объект.
00037                  * 
00038                  * Исключение Cntm::IllegalStateException - если синхропространство явно не указано, а главное синхропространство отсутствует
00039                  */
00040                 ActiveSynchroRefBaseEx(const SynchroSpace::Ptr& Space = Cntm::SynchroSpace::Ptr()):
00041                         SynchroRefBaseEx(Space) {}
00042                 
00043                 /**
00044                  * Конструктор используется, когда объект создается в новом или просто другом синхропространстве. В этом случае конструктор синхрообъекта пытается извлечь синхропространство из ConstructSync и если ConstructSync был проинициализирован, то использует извлеченное синхропространство. Если был указан пустой ConstructSync, то первым делом конструктор синхрообъекта создает дополнительное синхропространство (класс Cntm::ExtraSynchroSpace) и присваивает его ConstructSync (который передан по ссылке). Т.о. работа конструктора SynchroObject и конструкторов производных классов всегда будет осуществляться внутри синхпространства данного объекта.
00045                  * 
00046                  * @param ConstructSync - ссылка на синхросекцию, которая обеспечивает нахождение в синхропространстве при создании объекта.
00047                  */
00048                 ActiveSynchroRefBaseEx(Sync& ConstructSync):
00049                         SynchroRefBaseEx(ConstructSync) {}
00050                 
00051                 /**
00052                  * Конструктор используется, когда объект создается в новом или просто другом синхропространстве. В этом случае конструктор синхрообъекта пытается извлечь синхропространство из ConstructSync и если ConstructSync был проинициализирован, то использует извлеченное синхропространство. Если был указан пустой ConstructSync, то первым делом конструктор синхрообъекта создает дополнительное синхропространство (класс Cntm::ExtraSynchroSpace) и присваивает его ConstructSync (который передан по ссылке). Т.о. работа конструктора SynchroObject и конструкторов производных классов всегда будет осуществляться внутри синхпространства данного объекта.
00053                  * 
00054                  * @param ConstructSync - ссылка на реентерабельную синхросекцию, которая обеспечивает нахождение в синхропространстве при создании объекта.
00055                  */
00056                 ActiveSynchroRefBaseEx(ReentrantSync& ConstructSync):
00057                         SynchroRefBaseEx(ConstructSync) {}
00058 
00059         /**
00060          * Реализация IRefObject::DeleteInstance. Является служебным методом. Уничтожает объект.
00061          */
00062                 void DeleteInstance() { TerminateAllThreads(); }
00063                 
00064         private:
00065         
00066                 /**
00067                  * Виртуальный метод. Вызывается когда все потоки завершились. В свою очередь вызывает метод DeleteInstance() базового класса. 
00068                  */
00069                 void AllThreadsFinished() { SynchroRefBaseEx::DeleteInstance(); }
00070         };
00071 
00072 }
00073 
00074 #endif //CNTM_ACTIVESYNCHROREFBASEEX_H

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3