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_USINGREENTRANTSYNC_H 00015 #define CNTM_USINGREENTRANTSYNC_H 00016 #include <Cntm/Synchro/SyncScopes/ReentrantSync.h> 00017 #include <Cntm/Synchro/IBasicSynchro.h> 00018 #include <Cntm/Concurrency/UsingScopes/Using.h> 00019 00020 namespace Cntm 00021 { 00022 00023 /** 00024 * Добавляет к Cntm::Using свойства синхросекций, т.е. объединяет классы Cntm::Using и Cntm::ReentrantSync в один. 00025 * 00026 * Класс не поддерживает многопоточность. 00027 * @author Овсеевич Р. 00028 * \ingroup Concurrency 00029 */ 00030 class UsingReentrantSync: public Using, public ReentrantSync 00031 { 00032 public: 00033 00034 /** 00035 * Конструктор инициализации ссылочным указателем или обычной ссылкой (которая м.б. преобразована к ссылочному указателю) на объект. Сохраняет полученный ссылочный указатель. Производит вход в синхропространство в реентерабельном режиме. 00036 * 00037 * Исключение: TerminatingSignal - если установлен флаг Terminated() текущей единицы выполнения или объект находится в удаляемом состоянии (ссылочный указатель на него равен NULL). 00038 * @param Object - сылочный указатель или ссылка на объект, который будет использоваться в этой секции. 00039 */ 00040 UsingReentrantSync(const IBasicSynchro::Ptr& Object): Using(Object), ReentrantSync(Object) { } 00041 00042 /** 00043 * Оператор присвоения ссылочного указателя или обычной ссылки (которая м.б. преобразована к ссылочному указателю) на объект. Сохраняет полученный ссылочный указатель. Производит вход в синхропространство в реентерабельном режиме. 00044 * 00045 * Исключение: TerminatingSignal - если установлен флаг Terminated() текущей единицы выполнения или объект находится в удаляемом состоянии (ссылочный указатель на него равен NULL). 00046 * @param Object - сылочный указатель или ссылка на объект, который будет использоваться в этой секции. 00047 */ 00048 UsingReentrantSync& operator = (const Cntm::IBasicSynchro::Ptr& Object) 00049 { 00050 Using::operator = (Object); 00051 ReentrantSync::operator = (Object); 00052 return *this; 00053 } 00054 00055 /** 00056 * Досрочный выход из Using-секции. Сбрасывает в NULL значение хранящегося ссылочного указателя и выходит из синхропространства. 00057 */ 00058 void Unuse() 00059 { 00060 SetNull(); 00061 Leave(); 00062 } 00063 }; 00064 00065 } 00066 00067 #endif //CNTM_USINGREENTRANTSYNC_H
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |