UsingReentrantSync.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_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

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