00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _TGS_SB_THREAD_H_
00028 #define _TGS_SB_THREAD_H_
00029
00030 #include <Inventor/SbBase.h>
00031 #include <Inventor/STL/list>
00032
00033 #if defined(_WIN32)
00034 #pragma warning( push )
00035 #pragma warning( disable: 4290 4251 )
00036 #endif
00037
00038 class SbThreadMutex;
00039
00069 class SbThread
00070 {
00071 public:
00072
00079 static SbThread* create( void *(threadRoutine)(void* _userData), void *structData);
00080
00085 static void destroy(SbThread *);
00086
00091 static void kill(SbThread *thread);
00092
00097 static SbBool isStopRequested();
00098
00112 static int increasePriorityLevel( int value = 1 );
00113
00118 static int decreasePriorityLevel( int value = 1 );
00119
00123 static int getPriorityLevel();
00124
00129 static int setPriorityLevel( int );
00130
00135 static SbThreadId_t getCurrentThreadId();
00136
00144 static void setName(const SbThreadId_t &threadId, const char* threadName);
00145
00146 private:
00150 static bool switchThread();
00151
00155 SbBool isRunning() { return bIsRunning; }
00156
00160 static void sleep_ms( int dT_ms );
00161
00162
00163 private:
00164 SbThread(void);
00165 ~SbThread(void);
00166
00167
00168 static void * threadTaskLauncher( void *_threadLancher );
00169 bool bIsRunning;
00170
00171 private:
00172
00173 #ifdef _WIN32
00174 SbHandle threadHandle;
00175 #endif
00176
00177 SbThreadId_t threadId;
00178 typedef std::list< SbThread* > SbThreadList;
00179 static SbThread::SbThreadList m_threadList;
00180 static SbThreadMutex m_threadListMutex;
00181 bool m_mustStop;
00182 };
00183
00184
00185 #if defined(_WIN32)
00186 #pragma warning( pop )
00187 #endif
00188
00189 #endif //_TGS_SB_THREAD_H_
00190
00191