Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

CThreadManagersPool.hpp

Go to the documentation of this file.
00001 
00002 #ifndef CThreadManagersPool_h
00003 #define CThreadManagersPool_h 1
00004 
00005 #include <map>
00006 #include <string>
00007 #include <ace/Thread_Manager.h>
00008 #include <ace/Singleton.h>
00009 
00010 #include <ace/Synch.h>
00011 
00012 // CThreadException
00013 #include "jic/exc/CThreadException.hpp"
00014 
00015 namespace THREAD {
00016 
00017   typedef std::map<std::string,ACE_Thread_Manager *> ThreadManagersMap;
00018 
00019   //    Pool de Thead Managers.  Actualmente tiene dependencia
00020   //    directa con los threads manager de ACE. Se podrķa
00021   //    desacoplar, pero de momento no se ha hecho.
00022 
00023   class CThreadManagersPool 
00024   {
00025 
00026     public:
00027         CThreadManagersPool();
00028 
00029         ~CThreadManagersPool();
00030 
00031         //      Obtiene un thread manager determinado. Una vez creado un
00032         //      Thread Manager ya no se destruye.
00033         //      El Thread Manager cuando se crea, se hace con todas sus
00034         //      propiedades por defecto.
00035         ACE_Thread_Manager & getThreadManager (const std::string &strIdThreadManager);
00036 
00037         //      Cancela todos los threads de todos los Threads Managers
00038         void cancelAll (bool bAsyncCancel = false);
00039 
00040         //      Cancela todos los threads de un determinado Thread Manger
00041         void cancel (const std::string &strIdThreadManager, bool bAsyncCancel = false) throw (CThreadException);
00042 
00043         //      Suspende todos los threads de todos los Thead Manager
00044         void suspendAll ();
00045 
00046         //      Activa todos los threads de todos los Thead Manager
00047         void resumeAll ();
00048 
00049         //      Suspende todos los threads de un determinaod Thead
00050         //      Manager
00051         void suspend (const std::string &strIdThreadManager) throw (CThreadException);
00052 
00053         //      Activa todos los threads de un determinaod Thead Manager
00054         void resume (const std::string &strIdThreadManager) throw (CThreadException);
00055 
00056       // Additional Public Declarations
00057 
00058     protected:
00059       // Additional Protected Declarations
00060 
00061     private:
00062 
00063         void cancelByRef (const ThreadManagersMap::iterator &itThreadManagersMap, bool bAsyncCancel);
00064 
00065         void suspendByRef (const ThreadManagersMap::iterator &itThreadManagersMap);
00066 
00067         void resumeByRef (const ThreadManagersMap::iterator &itThreadManagersMap);
00068 
00069         void find (ThreadManagersMap::iterator &itThreadManagersMap, const std::string &strIdThreadManager, const std::string &strErrMsg) throw (CThreadException);
00070 
00071       // Additional Private Declarations
00072         ACE_Thread_Mutex m_mutex;
00073     private: 
00074       // Data Members for Class Attributes
00075 
00076         ThreadManagersMap m_pool;
00077 
00078       // Additional Implementation Declarations
00079 
00080   };
00081 
00082   typedef ACE_Unmanaged_Singleton<CThreadManagersPool,ACE_SYNCH_MUTEX> ThreadManagersPool;
00083 
00084   // Class THREAD::CThreadManagersPool 
00085 
00086 } // namespace THREAD
00087 
00088 #endif

Generated on Wed Mar 5 21:31:47 2003 for JIC by doxygen1.3-rc3