Шаблон класса Cntm::SynchroRefHandle< T, FinalizeP >
[Cntm.RefUtils]

Граф наследования:Cntm::SynchroRefHandle< T, FinalizeP >:

Cntm::SpecUtils::BasicRefHandle< T, SpecUtils::SynchroRefHandleRefImplementation >

Полный список членов класса


Подробное описание

template<typename T, void(T::*)() FinalizeP>
class Cntm::SynchroRefHandle< T, FinalizeP >

Механизм хэндлов предназначен для автоматизации вызова определенного метода объекта при уничтожении последнего хэндла, связанного с объектом.

Данный класс является шаблоном, первым параметром которого является тип объекта, а вторым - указатель на метод объекта, который следует вызвать. Метод должен иметь сигнатуру void(void), т.е. ничего не принимать и не возвращать.

Указанный в шаблоне метод может вызываться многократно. Это происходит, если после уничтожения всех хэндлов, связанных с объектом и вызова указанного метода, вновь будут созданы хэндлы, связанные с объектом.

Отличием данного класса от RefHandle является то, что гарантируется синхронизированный отложенный вызов указанного в шаблоне метода. Это приводит к тому, что объект, с которым связан хэндл, может быть только синхрообъектом.

Особенность вызова указанного в шаблоне метода. Если после того, как будет уничтожен последний хэндл, связанный с объектом, но до выполнения метода (он вызывается отложенно) создать новый хэндл, связанный с объектом, внутри синхропространства, к которому принадлежит объект, то гарантируется, что вызов метода будет отменен.

Пример:

 class Class1: public SynchroRefBase
 {
 public:
        typedef RefPtr<Class1> Ptr;
        void Close() { cout << "Class1::Close()" << endl; }
        typedef SynchroRefHandle<Class1, &Class1::Close> Handle;
 };
 
 int main(int argc, char **argv)
 {
        Cntm::QTMainSynchroSpace::Application a(argc, argv);
 
        mw = new Form1();
        mw->setCaption( "Form1" );
        mw->show();
        a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) );
        
        Class1::Ptr p(new Class1);
 
        if (Какое-то условие)
        {
                Class1::Handle h1 = p;
                Какието-действия с объектом p.
        } // Гарантируется вызов метода Close() для объекта p после уничтожения хэндла, связанного с ним.
        a.exec();
 }

Класс обеспечивает многопоточность.

Автор:
Овсеевич Р.

См. определение в файле SynchroRefHandle.h строка 69


Открытые члены

 SynchroRefHandle ()
 Конструктор по умолчанию.
 SynchroRefHandle (RefPtr< T > Object)
 Конструктор.
SynchroRefHandle< T,
FinalizeP > & 
operator= (RefPtr< T > Object)
 Связывает хэндл с новым объектом.
void Assign (RefPtr< T > Object)
 Связывает хэндл с новым объектом.
void Unassign ()
 Делает хэндл не связанным.

Конструктор(ы)

template<typename T, void(T::*)() FinalizeP>
Cntm::SynchroRefHandle< T, FinalizeP >::SynchroRefHandle (  )  [inline]

Конструктор по умолчанию.

Создает хэндл, не связанный ни с каким объектом.

См. определение в файле SynchroRefHandle.h строка 76

template<typename T, void(T::*)() FinalizeP>
Cntm::SynchroRefHandle< T, FinalizeP >::SynchroRefHandle ( RefPtr< T >  Object  )  [inline]

Конструктор.

Создает хэндл, связанный с указанным объектом.

См. определение в файле SynchroRefHandle.h строка 85


Методы

template<typename T, void(T::*)() FinalizeP>
SynchroRefHandle< T, FinalizeP >& Cntm::SynchroRefHandle< T, FinalizeP >::operator= ( RefPtr< T >  Object  )  [inline]

Связывает хэндл с новым объектом.

См. определение в файле SynchroRefHandle.h строка 94

Перекрестные ссылки Cntm::SynchroRefHandle< T, FinalizeP >::Assign().

template<typename T, void(T::*)() FinalizeP>
void Cntm::SynchroRefHandle< T, FinalizeP >::Assign ( RefPtr< T >  Object  )  [inline]

Связывает хэндл с новым объектом.

См. определение в файле SynchroRefHandle.h строка 103

template<typename T, void(T::*)() FinalizeP>
void Cntm::SynchroRefHandle< T, FinalizeP >::Unassign (  )  [inline]

Делает хэндл не связанным.

См. определение в файле SynchroRefHandle.h строка 112

Перекрестные ссылки Cntm::SynchroRefHandle< T, FinalizeP >::Assign().


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