Proper initialization of static objects (singletons) with splash screen support

Environment: Win98, VC 5.0

Introduction:

Do you have code like this in your InitInstance() ?

  ...
  ClassXY::GlobalInit();
  ClassZA::GlobalSetup();
  ClassMurx::Prepare();
  ...

Then this is what you need!

The cdxCInitializerT base class helps you to design a proper, clear interface to initialize any objects you want in application scope (i.e. your CWinApp object exists during the initialization).  The basic idea is to design a class (cdxCInitializerT) that has two static members, InitInstance() and ExitInstance() which must be called from within your application's InitInstance()/ExitInstance().

These functions should now initialize all exisiting objects of cdxCInitializerT by calling a virtual function OnInitInstance().  Conversely, OnExitInstance() is called to clean up what you allocated using OnInitInstance().  This is exactly what the cdxCInitializerT class offers you  -  an interface to initialize/clean up your objects that have been constructed in global scope (static members variables, global variables).

Moreover, the class can be parameterized (by two template arguments) to give you the chance to provide feedback to the calling function (i.e. each of your objects can get a pointer to a "splash screen" dialog where it can write nice stuff into).  Additionally, the design gives you the opportunity to define an ordering of the initialization (object A will be initialized after B for sure).

Finally, a former class, cdxCInitializerThreadT has been added that helps you to implement a splash screen in a second thread easily (you just need a dialog and some member functions to modify its controls - that's it!).

If you use my class, you should make your InitInstance() look like this:

  ...
  cdxCInitializerThreadT<CSplashScreen> splash;

  if (!cdxCInitializer<..>::InitInstance(splash))
     return FALSE;

and all your nasty classes that used a "GlobalInit()" before will be set up properly - and adding new "GlobalInit()" classes will be easy;  you don't need to modify your application's implementation file anymore.

Features:

  • Support for ordered initialization and clean-up.
  • Support for "Feedback" objects (splash screens).
  • Support to quickly implement a splash screen with a second thread.
  • Rather complete documentation with tutorial and function reference.

Download:

Source code and documentation   Initializer_src.zip (17 KB)
Sample project (includes source code and documentation)   Initializer_proj.zip (61 KB)



Comments

  • C++-sites

    Posted by Legacy on 05/24/1999 12:00am

    Originally posted by: "The notorious Captain Milla"

    Sehr geehrter Herr B�hler

    Ich h�tte eine Frage an Sie und zwar ob Sie weitere deutschsprachige C++-seiten kennen?(englische kenne ich selbst sehr viele).

    ciao

    "The notorious Captain Milla"

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: October 29, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Are you interested in building a cognitive application using the power of IBM Watson? Need a platform that provides speed and ease for rapidly deploying this application? Join Chris Madison, Watson Solution Architect, as he walks through the process of building a Watson powered application on IBM Bluemix. Chris will talk about the new Watson Services just released on IBM bluemix, but more importantly he will do a step by step cognitive …

  • Live Event Date: October 23, 2014 @ 12:00 p.m. ET / 9:00 a.m. PT Despite the current "virtualize everything" mentality, there are advantages to utilizing physical hardware for certain tasks. This is especially true for backups. In many cases, it is clearly in an organization's best interest to make use of physical, purpose-built backup appliances rather than relying on virtual backup software (VBA - Virtual Backup Appliances). Join us for this eSeminar to learn why physical appliances are preferable to …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds