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
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |