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