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 #include "acsThreadExport.h"
00026
00027 namespace ACS
00028 {
00029
00034 class acsThread_EXPORT ThreadManager : public ACS::ThreadManagerBase,
00035 public Logging::Loggable
00036 {
00037 friend class Thread;
00038
00039 public:
00040
00044 ThreadManager() :
00045 ACS::ThreadManagerBase(),
00046 Logging::Loggable() {}
00047
00053 ThreadManager(Logging::Logger::LoggerSmartPtr logger) :
00054 ACS::ThreadManagerBase(),
00055 Logging::Loggable(logger) {}
00056
00065 template <class T>
00066 T* create(const ACE_CString name);
00067
00068
00069
00070
00071
00072 template <class T>
00073 T* create(const ACE_CString name,
00074 const TimeInterval responseTime,
00075 const TimeInterval sleepTime);
00076
00077
00078
00079
00080 template <class T>
00081 T* create(const ACE_CString name,
00082 const TimeInterval responseTime,
00083 const TimeInterval sleepTime,
00084 bool del);
00085
00086
00087
00088
00089
00090 template <class T>
00091 T* create(const ACE_CString name,
00092 const TimeInterval responseTime,
00093 const TimeInterval sleepTime,
00094 bool del,
00095 const long thrFlags);
00096
00097
00098
00099
00100
00101 template <class T>
00102 T* create(const ACE_CString name,
00103 const TimeInterval responseTime,
00104 const TimeInterval sleepTime,
00105 bool del,
00106 const long thrFlags,
00107 const size_t stackSize);
00108
00117 template <class T, class P>
00118 T* create(const ACE_CString name, P&);
00119
00120
00121
00122
00123
00124 template <class T, class P>
00125 T* create(const ACE_CString name, P&,
00126 const TimeInterval responseTime,
00127 const TimeInterval sleepTime);
00128
00129
00130
00131
00132 template <class T, class P>
00133 T* create(const ACE_CString name, P&,
00134 const TimeInterval responseTime,
00135 const TimeInterval sleepTime,
00136 bool del);
00137
00138
00139
00140
00141
00142 template <class T, class P>
00143 T* create(const ACE_CString name, P&,
00144 const TimeInterval responseTime,
00145 const TimeInterval sleepTime,
00146 bool del,
00147 const long thrFlags);
00148
00149
00150
00151
00152
00153 template <class T, class P>
00154 T* create(const ACE_CString name, P&,
00155 const TimeInterval responseTime,
00156 const TimeInterval sleepTime,
00157 bool del,
00158 const long thrFlags,
00159 const size_t stackSize);
00160
00165 void destroy(ACS::Thread* thr)
00166 {
00167 if (thr!=NULL)
00168 {
00169 removeFromMap (thr->getName());
00170 delete thr;
00171 thr = 0;
00172 }
00173 }
00174
00175 private:
00176
00180 void operator=(const ThreadManager&);
00181
00185 ThreadManager(const ThreadManager&);
00186
00194 class ThreadManagerTSS
00195 {
00196 public:
00197 ThreadManagerTSS() : m_tm(0){}
00198
00202 void setThreadManager(ThreadManager* _tm){ m_tm = _tm; }
00203
00208 ThreadManager* getThreadManager(bool _reset)
00209 {
00210 ThreadManager* tmp_tm = m_tm;
00211 if (_reset)
00212 m_tm = 0;
00213 return tmp_tm;
00214 }
00215
00219 void resetThreadManager() {m_tm = 0;}
00220
00221 protected:
00222 ThreadManager* m_tm;
00223 };
00224
00228 static ACE_TSS<ThreadManagerTSS> threadManagerTSS;
00229
00230 };
00231
00232
00233 #include "acsThreadManager.i"
00234
00235 };
00236
00237 #endif