Данный класс является шаблоном, первым параметром которого является тип объекта, а вторым - указатель на метод объекта, который следует вызвать. Метод должен иметь сигнатуру 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 () |
Делает хэндл не связанным. |
Cntm::SynchroRefHandle< T, FinalizeP >::SynchroRefHandle | ( | ) | [inline] |
Конструктор по умолчанию.
Создает хэндл, не связанный ни с каким объектом.
См. определение в файле SynchroRefHandle.h строка 76
Cntm::SynchroRefHandle< T, FinalizeP >::SynchroRefHandle | ( | RefPtr< T > | Object | ) | [inline] |
Конструктор.
Создает хэндл, связанный с указанным объектом.
См. определение в файле SynchroRefHandle.h строка 85
SynchroRefHandle< T, FinalizeP >& Cntm::SynchroRefHandle< T, FinalizeP >::operator= | ( | RefPtr< T > | Object | ) | [inline] |
Связывает хэндл с новым объектом.
См. определение в файле SynchroRefHandle.h строка 94
Перекрестные ссылки Cntm::SynchroRefHandle< T, FinalizeP >::Assign().
void Cntm::SynchroRefHandle< T, FinalizeP >::Assign | ( | RefPtr< T > | Object | ) | [inline] |
void Cntm::SynchroRefHandle< T, FinalizeP >::Unassign | ( | ) | [inline] |
Делает хэндл не связанным.
См. определение в файле SynchroRefHandle.h строка 112
Перекрестные ссылки Cntm::SynchroRefHandle< T, FinalizeP >::Assign().
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |