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
00064 class SbThread
00065 {
00066 public:
00067
00074 static SbThread* create( void *(threadRoutine)(void* _userData), void *structData);
00075
00080 static void destroy(SbThread *);
00081
00086 static void kill(SbThread *thread);
00087
00092 static SbBool isStopRequested();
00093
00107 static int increasePriorityLevel( int value = 1 );
00108
00113 static int decreasePriorityLevel( int value = 1 );
00114
00118 static int getPriorityLevel();
00119
00124 static int setPriorityLevel( int );
00125
00130 static SbThreadId_t getCurrentThreadId();
00131
00139 static void setName(const SbThreadId_t &threadId, const char* threadName);
00140
00141 private:
00145 static bool switchThread();
00146
00150 SbBool isRunning() { return bIsRunning; }
00151
00155 static void sleep_ms( int dT_ms );
00156
00157
00158 private:
00159 SbThread(void);
00160 ~SbThread(void);
00161
00162
00163 static void * threadTaskLauncher( void *_threadLancher );
00164 bool bIsRunning;
00165
00166 private:
00167
00168 #ifdef _WIN32
00169 SbHandle threadHandle;
00170 #endif
00171
00172 SbThreadId_t threadId;
00173 typedef std::list< SbThread* > SbThreadList;
00174 static SbThread::SbThreadList m_threadList;
00175 static SbThreadMutex m_threadListMutex;
00176 bool m_mustStop;
00177 };
00178
00179
00180 #if defined(_WIN32)
00181 #pragma warning( pop )
00182 #endif
00183
00184 #endif //_TGS_SB_THREAD_H_
00185
00186