Отличием данного класса от SynchroRefHandle является то, что задается не метод, а функция, принимающая ссылочный указатель на класс в качестве параметра.
Данный класс является шаблоном, первым параметром которого является тип объекта, а вторым - указатель на функцию, которую следует вызвать. Функция должна иметь сигнатуру void(RefPtr<T>). При вызове данной функции гарантируется, что переданный указатель никогда не будет содержать NULL значения.
Указанный в шаблоне метод может вызываться многократно. Это происходит, если после уничтожения всех хэндлов, связанных с объектом и вызова указанного метода, вновь будут созданы хэндлы, связанные с объектом.
Отличием данного класса от RefHandleFn является то, что гарантируется синхронизированный отложенный вызов указанного в шаблоне метода. Это приводит к тому, что объект, с которым связан хэндл, может быть только синхрообъектом.
Особенность вызова указанной в шаблоне функции. Если после того, как будет уничтожен последний хэндл, связанный с объектом, но до выполнения функции (она вызывается отложенно) создать новый хэндл, связанный с объектом, внутри синхропространства, к которому принадлежит объект, то гарантируется, что вызов функции будет отменен.
Пример:
class Class1: public SynchroRefBase { private: static void AutoClose(RefPtr<Class1> p) {...} public: typedef RefPtr<Class1> Ptr; typedef SynchroRefHandleFn<Class1, &Class1::AutoClose> 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(); }
Класс обеспечивает многопоточность.
См. определение в файле SynchroRefHandleFn.h строка 72
Открытые члены | |
SynchroRefHandleFn () | |
Конструктор по умолчанию. | |
SynchroRefHandleFn (RefPtr< T > Object) | |
Конструктор. | |
SynchroRefHandleFn < T, FinalizeP > & | operator= (RefPtr< T > Object) |
Связывает хэндл с новым объектом. | |
void | Assign (RefPtr< T > Object) |
Связывает хэндл с новым объектом. | |
void | Unassign () |
Делает хэндл не связанным. |
Cntm::SynchroRefHandleFn< T, FinalizeP >::SynchroRefHandleFn | ( | ) | [inline] |
Конструктор по умолчанию.
Создает хэндл, не связанный ни с каким объектом.
См. определение в файле SynchroRefHandleFn.h строка 79
Cntm::SynchroRefHandleFn< T, FinalizeP >::SynchroRefHandleFn | ( | RefPtr< T > | Object | ) | [inline] |
Конструктор.
Создает хэндл, связанный с указанным объектом.
См. определение в файле SynchroRefHandleFn.h строка 88
SynchroRefHandleFn< T, FinalizeP >& Cntm::SynchroRefHandleFn< T, FinalizeP >::operator= | ( | RefPtr< T > | Object | ) | [inline] |
Связывает хэндл с новым объектом.
См. определение в файле SynchroRefHandleFn.h строка 97
Перекрестные ссылки Cntm::SynchroRefHandleFn< T, FinalizeP >::Assign().
void Cntm::SynchroRefHandleFn< T, FinalizeP >::Assign | ( | RefPtr< T > | Object | ) | [inline] |
void Cntm::SynchroRefHandleFn< T, FinalizeP >::Unassign | ( | ) | [inline] |
Делает хэндл не связанным.
См. определение в файле SynchroRefHandleFn.h строка 114
Перекрестные ссылки Cntm::SynchroRefHandleFn< T, FinalizeP >::Assign().
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |