• Classes
  • Modules
  • Namespaces
  • Files
  • Related Pages
  • File List
  • File Members

acsThreadManager.h

Go to the documentation of this file.
00001 #ifndef _ACS_THREAD_MANAGER_H
00002 #define _ACS_THREAD_MANAGER_H
00003 /*******************************************************************************
00004 * E.S.O. - VLT project
00005 *
00006 * "@(#) $Id: acsThreadManager.h,v 1.21 2012/02/29 12:50:09 tstaig Exp $"
00007 *
00008 * who       when        what
00009 * --------  ----------  ----------------------------------------------
00010 * bjeram  yyyy-mm-dd  created
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      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00070      * @throw acsthreadErrType::CanNotCreateThreadExImpl
00071          */
00072         template <class T>
00073         T* create(const ACE_CString name,
00074                   const TimeInterval responseTime,
00075                   const TimeInterval sleepTime);
00076     /*
00077      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00078      * @throw acsthreadErrType::CanNotCreateThreadExImpl
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      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00088      * @throw acsthreadErrType::CanNotCreateThreadExImpl
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      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00099      * @throw acsthreadErrType::CanNotCreateThreadExImpl
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      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00122      * @throw acsthreadErrType::CanNotCreateThreadExImpl
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      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00130      * @throw acsthreadErrType::CanNotCreateThreadExImpl
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      * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00140      * @throw acsthreadErrType::CanNotCreateThreadExImpl
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          * @throw acsthreadErrType::ThreadAlreadyExistExImpl
00151          * @throw acsthreadErrType::CanNotCreateThreadExImpl
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                     }//if
00173             }//destroy
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     };//class ThreadManager
00231 
00232 /* implementation for template functions*/
00233 #include "acsThreadManager.i"
00234 
00235 };//namespace ACS
00236 
00237 #endif

Generated on Mon May 4 2015 08:27:42 for ACS-2015.4 C++ API by  doxygen 1.7.0