00001 #if !defined(__THREAD_HPP)
00002 #define __THREAD_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #if !defined IN_COMMON_HPP
00025 #error Thread.hpp is included by Common.hpp only.
00026 #endif
00027
00028 #if !defined(__SINGLETON_HPP)
00029 #include <Singleton.hpp>
00030 #endif
00031
00032 #if !defined(__MAP_HPP)
00033 #include <Map.hpp>
00034 #endif
00035
00036 #if !defined(__INVALIDTHREADEXCEPTION_HPP)
00037 #include <InvalidThreadException.hpp>
00038 #endif
00039
00040 namespace corelinux
00041 {
00042 DECLARE_CLASS( ThreadContext );
00043
00044 CORELINUX_MAP
00045 (
00046 ThreadIdentifier,
00047 ThreadContextPtr,
00048 std::less<ThreadIdentifier>,
00049 ThreadMap
00050 );
00051
00052
00053
00054
00055
00056 DECLARE_CLASS( Thread );
00057 DECLARE_TYPE( Singleton<Thread>, ThreadManager );
00058
00073 class Thread : public Synchronized
00074 {
00075 public:
00076
00077
00078
00079
00080
00082
00083 Thread( void ) throw( Assertion );
00084
00086
00087 virtual ~Thread( void );
00088
00089
00090
00091
00092
00093
00094
00095
00096
00103 static Int getKernelError( void );
00104
00111 static ThreadIdentifier getThreadIdentifier( void );
00112
00119 static ThreadIdentifier getParentThreadIdentifier( void );
00120
00127 static ThreadIdentifierCref getThreadManagerIdentifier( void );
00128
00137 static ThreadContextCref getThreadContext( ThreadIdentifierCref )
00138 throw ( InvalidThreadException ) ;
00139
00140
00146 static Count getCreatedThreadCount( void );
00147
00153 static Count getActiveThreadCount( void );
00154
00160 static Count getBlockedThreadCount( void );
00161
00168 static Count getCompletedThreadCount( void );
00169
00171
00172 static void dump( void );
00173
00174
00175
00176
00177
00187 static ThreadIdentifier startThread( ThreadContextRef ) ;
00188
00199 static Int waitForThread( ThreadIdentifierCref )
00200 throw ( InvalidThreadException );
00201
00211 static void destroyThreadContext( ThreadIdentifierCref )
00212 throw ( InvalidThreadException, Assertion );
00213
00223 static Int getThreadPriority( ThreadIdentifierCref )
00224 throw ( InvalidThreadException, Assertion );
00225
00236 static void setThreadPriority( ThreadIdentifierCref, Int )
00237 throw ( InvalidThreadException, Assertion );
00238
00239 protected:
00240
00241
00242
00243
00250 Thread( ThreadCref ) throw ( Assertion );
00251
00252
00253
00254
00255
00264 ThreadRef operator=( ThreadCref ) throw ( Assertion );
00265
00273 bool operator==( ThreadCref ) const throw ( Assertion ) ;
00274
00275
00276
00277
00278
00279 static void threadTerminated( Int, VoidPtr, VoidPtr );
00280
00281 protected:
00282
00284
00285 static ThreadManager theThreadManager;
00286
00287 private:
00288
00290
00291 static ThreadMap theThreadMap;
00292
00293 static ThreadIdentifier theThreadManagerId;
00294 static Count theThreadCount;
00295 };
00296
00297 }
00298
00299 #endif // if !defined(__THREAD_HPP)
00300
00301
00302
00303
00304
00305
00306
00307
00308