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
00013 #include "jic/exc/CThreadException.hpp"
00014
00015 namespace THREAD {
00016
00017 typedef std::map<std::string,ACE_Thread_Manager *> ThreadManagersMap;
00018
00019
00020
00021
00022
00023 class CThreadManagersPool
00024 {
00025
00026 public:
00027 CThreadManagersPool();
00028
00029 ~CThreadManagersPool();
00030
00031
00032
00033
00034
00035 ACE_Thread_Manager & getThreadManager (const std::string &strIdThreadManager);
00036
00037
00038 void cancelAll (bool bAsyncCancel = false);
00039
00040
00041 void cancel (const std::string &strIdThreadManager, bool bAsyncCancel = false) throw (CThreadException);
00042
00043
00044 void suspendAll ();
00045
00046
00047 void resumeAll ();
00048
00049
00050
00051 void suspend (const std::string &strIdThreadManager) throw (CThreadException);
00052
00053
00054 void resume (const std::string &strIdThreadManager) throw (CThreadException);
00055
00056
00057
00058 protected:
00059
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
00072 ACE_Thread_Mutex m_mutex;
00073 private:
00074
00075
00076 ThreadManagersMap m_pool;
00077
00078
00079
00080 };
00081
00082 typedef ACE_Unmanaged_Singleton<CThreadManagersPool,ACE_SYNCH_MUTEX> ThreadManagersPool;
00083
00084
00085
00086 }
00087
00088 #endif