Hi Robert,

I think I get it :

I seems to be due to the osgDB::DynamicLibrary instance I use, which ref_ptr
unref when leaving the load code, so the destructor of the
RegisterReaderWriterProxy (my equivalent) was called, and it seems to be
sufficient to force a new call to the Registry constructor.

Does it sounds right for you ?

Thanks.

Regards,
   Vincent.

2009/5/19 Robert Osfield <[email protected]>

> Hi Vincent,
>
> It's odd that your report that your get different instances each time.
>  This suggest you've not implemeneted something correctly.  Most of
> the OSG wouldn't work if there wasn't a single Registry so it does
> work on the OSG side.
>
> As a general note I have moved from using the
> osgDB::Registry::instance approach to using something like:
>
> osg::ref_ptr<MySingletonClass>& MySingletonClass::instance()
> {
>     static osg::ref_ptr<MySingletonClass>& s_mySingleton = new
> MySingletonClass;
>     return s_mySingleton;
> }
>
> This approach allows you to reset the singleton externally, so it's
> not necessary to bool trick to get it to destruct.  With this little
> tweak the implementation code becomes much cleaner.
>
> Robert.
>
>
> On Tue, May 19, 2009 at 12:25 PM, Vincent Bourdier
> <[email protected]> wrote:
> > Hi Robert,
> >
> > The this I don't understand, is that I copy the code for my own registry,
> > with exactly the same static implementation, but I get a new instance
> each
> > time I call the instance(). The constructor is called and the adress
> > changes...
> >
> > This is a part of the code :
> >
> >
> >> Registry* Registry::instance(bool erase)
> >> {
> >>     static Registry* s_registry = new Registry;
> >>
> >>     if(erase)
> >>     {
> >>         s_registry->destruct();
> >>         s_registry = NULL;
> >>     }
> >>
> >>     return s_registry;
> >> }
> >>
> >>
> >> class DLL_EXPORT Registry
> >> {
> >>
> >> public :
> >>
> >>     static Registry* instance(bool erase = false);
> >> }
> >
> > I know static variable is the same for each instance, but how can it be
> true
> > if the constructor is called each time ?
> >
> > So i can't see the problem, considering this is the copy/paste of the osg
> > Registry code...
> >
> > Thanks.
> >
> > Regards,
> >    Vincent.
> >
> > 2009/5/19 Robert Osfield <[email protected]>
> >>
> >> HI Vincent,
> >>
> >> Go have a look at the source code, it contains the single static
> >> instance of the Registry, so the method only ever returns a single
> >> Registry.   It would be worth your reading up about static variables
> >> in C/C++ so you can understand how this stuff works, it really beyond
> >> the scope of the OSG community to teach your this stuff.
> >>
> >> Robert.
> >>
> >> On Tue, May 19, 2009 at 11:54 AM, Vincent Bourdier
> >> <[email protected]> wrote:
> >> > Hi all,
> >> >
> >> > A little new question about a c++ implementation of registry :
> >> >
> >> > The static method instance() return a new registry each time, so each
> >> > call
> >> > have a new instance, so how can the registry's class plugin list can
> be
> >> > good
> >> > ? any call to registry::instance()->addReaderWriter() add the the
> >> > reader/Wirter in a new registry instance ... so how can it works
> >> > correctly ?
> >> >
> >> > Thanks for you help.
> >> >
> >> > Regards,
> >> >    Vincent.
> >> >
> >> > 2009/5/15 Vincent Bourdier <[email protected]>
> >> >>
> >> >> Hi Art,
> >> >>
> >> >> I need to make these lib (dll/so) for linux and window at least, so I
> >> >> need
> >> >> common behavior.
> >> >> I'm thinking a mix of the inheriting class and the osg plugin
> registry
> >> >> behavior with the template static register method ... (note so
> >> >> understandable I think) that is to say, may be a mix of all these way
> >> >> can
> >> >> bring me to a good solution ..
> >> >>
> >> >> Still here if you have suggestion or ideas
> >> >>
> >> >> Thanks every one, still good to have quality help here :-)
> >> >>
> >> >> Regards,
> >> >>    Vincent.
> >> >>
> >> >> 2009/5/15 Art Tevs <[email protected]>
> >> >>>
> >> >>> Hi Vincent,
> >> >>>
> >> >>>
> >> >>>
> >> >>> Vincent.B wrote:
> >> >>> > Hi all,
> >> >>> > If you need to load dynamically some DLL (as osg plugins) but
> theses
> >> >>> > DLL have no similar I/O (so make each one inherit from a base
> class
> >> >>> > have no
> >> >>> > sense), how will you do ?
> >> >>> >
> >> >>> > I'm thinking in the calssical loadLibrary and getProcAdress for
> each
> >> >>> > one, ... but if you know or think in an other solution, I would be
> >> >>> > very
> >> >>> > interested to hear it.
> >> >>> >
> >> >>>
> >> >>>
> >> >>> In windows world each dll can have an entry point. This is a C
> >> >>> function,
> >> >>> which will be called on dll loading. In unix world, I am not sure if
> >> >>> there
> >> >>> exists default entry point routines, I think yes, but I am not sure.
> >> >>>
> >> >>> cheers,
> >> >>> art
> >> >>>
> >> >>> ------------------
> >> >>> Read this topic online here:
> >> >>> http://forum.openscenegraph.org/viewtopic.php?p=12249#12249
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> _______________________________________________
> >> >>> osg-users mailing list
> >> >>> [email protected]
> >> >>>
> >> >>>
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >> >>
> >> >
> >> >
> >> > _______________________________________________
> >> > osg-users mailing list
> >> > [email protected]
> >> >
> >> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >> >
> >> >
> >> _______________________________________________
> >> osg-users mailing list
> >> [email protected]
> >>
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> >
> > _______________________________________________
> > osg-users mailing list
> > [email protected]
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> >
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to