Go to the documentation of this file.00001 #ifndef _ACS_THREAD_MANAGER_H
00002 #define _ACS_THREAD_MANAGER_H
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 #ifndef __cplusplus
00019 #error This is a C++ include file and cannot be used from plain C
00020 #endif
00021 
00022 #include "acsThread.h"
00023 #include "loggingLoggable.h"
00024 #include <ACSErrTypeCommon.h>
00025 
00026 namespace ACS
00027 {
00028 
00033     class ThreadManager : public ACS::ThreadManagerBase,
00034                           public Logging::Loggable
00035     {
00036         friend class Thread;
00037 
00038       public:
00039 
00043         ThreadManager() :
00044             ACS::ThreadManagerBase(),
00045             Logging::Loggable() {}
00046 
00052         ThreadManager(Logging::Logger::LoggerSmartPtr logger) :
00053             ACS::ThreadManagerBase(),
00054             Logging::Loggable(logger) {}
00055 
00064         template <class T>
00065         T* create(const ACE_CString name);
00066 
00067     
00068 
00069 
00070 
00071         template <class T>
00072         T* create(const ACE_CString name,
00073                   const TimeInterval responseTime,
00074                   const TimeInterval sleepTime);
00075     
00076 
00077 
00078 
00079         template <class T>
00080         T* create(const ACE_CString name,
00081                   const TimeInterval responseTime,
00082                   const TimeInterval sleepTime,
00083                   bool del);
00084 
00085     
00086 
00087 
00088 
00089         template <class T>
00090         T* create(const ACE_CString name,
00091                   const TimeInterval responseTime,
00092                   const TimeInterval sleepTime,
00093                   bool del,
00094                   const long thrFlags);
00095 
00096     
00097 
00098 
00099 
00100         template <class T>
00101         T* create(const ACE_CString name,
00102                   const TimeInterval responseTime,
00103                   const TimeInterval sleepTime,
00104                   bool del,
00105                   const long thrFlags,
00106                   const size_t stackSize);
00107 
00116         template <class T, class P>
00117         T* create(const ACE_CString name, P&);
00118 
00119     
00120 
00121 
00122 
00123         template <class T, class P>
00124         T* create(const ACE_CString name, P&,
00125                   const TimeInterval responseTime,
00126                   const TimeInterval sleepTime);
00127     
00128 
00129 
00130 
00131         template <class T, class P>
00132         T* create(const ACE_CString name, P&,
00133                   const TimeInterval responseTime,
00134                   const TimeInterval sleepTime,
00135                   bool del);
00136 
00137     
00138 
00139 
00140 
00141         template <class T, class P>
00142         T* create(const ACE_CString name, P&,
00143                   const TimeInterval responseTime,
00144                   const TimeInterval sleepTime,
00145                   bool del,
00146                   const long thrFlags);
00147 
00148         
00149 
00150 
00151 
00152         template <class T, class P>
00153         T* create(const ACE_CString name, P&,
00154                         const TimeInterval responseTime,
00155                         const TimeInterval sleepTime,
00156                         bool del,
00157                         const long thrFlags,
00158                         const size_t stackSize);
00159 
00164         void destroy(ACS::Thread* thr)
00165             {
00166                 if (thr!=NULL)
00167                     {
00168                     removeFromMap (thr->getName());
00169                     delete thr;
00170                     thr = 0;
00171                     }
00172             }
00173 
00174       private:
00175 
00179         void operator=(const ThreadManager&);
00180 
00184         ThreadManager(const ThreadManager&);
00185 
00193         class ThreadManagerTSS
00194         {
00195           public:
00196             ThreadManagerTSS() : m_tm(0){}
00197 
00201             void setThreadManager(ThreadManager* _tm){ m_tm = _tm; }
00202 
00207             ThreadManager* getThreadManager(bool _reset)
00208                 {
00209                     ThreadManager* tmp_tm = m_tm;
00210                     if (_reset)
00211                         m_tm = 0;
00212                     return tmp_tm;
00213                 }
00214 
00218             void resetThreadManager() {m_tm = 0;}
00219 
00220           protected:
00221             ThreadManager* m_tm;
00222         };
00223 
00227         static ACE_TSS<ThreadManagerTSS> threadManagerTSS;
00228 
00229     };
00230 
00231 
00232 #include "acsThreadManager.i"
00233 
00234 };
00235 
00236 #endif