Common/vtkMultiThreader.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00024 #ifndef __vtkMultiThreader_h
00025 #define __vtkMultiThreader_h
00026
00027 #include "vtkObject.h"
00028
00029 #ifdef VTK_USE_SPROC
00030 #include <sys/types.h>
00031 #include <unistd.h>
00032 #endif
00033
00034 #if defined(VTK_USE_PTHREADS) || defined(VTK_HP_PTHREADS)
00035 #include <pthread.h>
00036 #include <sys/types.h>
00037 #include <unistd.h>
00038 #endif
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifdef VTK_USE_SPROC
00054 typedef int vtkThreadProcessIDType;
00055 #endif
00056
00057
00058
00059
00060
00061 #ifdef VTK_USE_PTHREADS
00062 typedef void *(*vtkThreadFunctionType)(void *);
00063 typedef pthread_t vtkThreadProcessIDType;
00064
00065
00066 #endif
00067
00068 #ifdef VTK_USE_WIN32_THREADS
00069 typedef LPTHREAD_START_ROUTINE vtkThreadFunctionType;
00070 typedef HANDLE vtkThreadProcessIDType;
00071
00072
00073 #endif
00074
00075 #if !defined(VTK_USE_PTHREADS) && !defined(VTK_USE_WIN32_THREADS)
00076 typedef void (*vtkThreadFunctionType)(void *);
00077 typedef int vtkThreadProcessIDType;
00078
00079
00080 #endif
00081
00082
00083 class vtkMutexLock;
00084
00085 class VTK_COMMON_EXPORT vtkMultiThreader : public vtkObject
00086 {
00087 public:
00088 static vtkMultiThreader *New();
00089
00090 vtkTypeRevisionMacro(vtkMultiThreader,vtkObject);
00091 void PrintSelf(ostream& os, vtkIndent indent);
00092
00104
00105 #define ThreadInfoStruct vtkMultiThreader::ThreadInfo
00106 class ThreadInfo
00107 {
00108 public:
00109 int ThreadID;
00110 int NumberOfThreads;
00111 int *ActiveFlag;
00112 vtkMutexLock *ActiveFlagLock;
00113 void *UserData;
00114 };
00115
00116
00118
00121 vtkSetClampMacro( NumberOfThreads, int, 1, VTK_MAX_THREADS );
00122 vtkGetMacro( NumberOfThreads, int );
00124
00126
00129 static void SetGlobalMaximumNumberOfThreads(int val);
00130 static int GetGlobalMaximumNumberOfThreads();
00132
00134
00137 static void SetGlobalDefaultNumberOfThreads(int val);
00138 static int GetGlobalDefaultNumberOfThreads();
00140
00141
00142
00143
00144
00145
00148 void SingleMethodExecute();
00149
00153 void MultipleMethodExecute();
00154
00159 void SetSingleMethod(vtkThreadFunctionType, void *data );
00160
00163 void SetMultipleMethod( int index, vtkThreadFunctionType, void *data );
00164
00168 int SpawnThread( vtkThreadFunctionType, void *data );
00169
00171 void TerminateThread( int thread_id );
00172
00173
00174 protected:
00175 vtkMultiThreader();
00176 ~vtkMultiThreader();
00177
00178
00179 int NumberOfThreads;
00180
00181
00182
00183
00184 ThreadInfo ThreadInfoArray[VTK_MAX_THREADS];
00185
00186
00187 vtkThreadFunctionType SingleMethod;
00188 vtkThreadFunctionType MultipleMethod[VTK_MAX_THREADS];
00189
00190
00191
00192 int SpawnedThreadActiveFlag[VTK_MAX_THREADS];
00193 vtkMutexLock *SpawnedThreadActiveFlagLock[VTK_MAX_THREADS];
00194 vtkThreadProcessIDType SpawnedThreadProcessID[VTK_MAX_THREADS];
00195 ThreadInfo SpawnedThreadInfoArray[VTK_MAX_THREADS];
00196
00197
00198
00199
00200 void *SingleData;
00201 void *MultipleData[VTK_MAX_THREADS];
00202
00203 private:
00204 vtkMultiThreader(const vtkMultiThreader&);
00205 void operator=(const vtkMultiThreader&);
00206 };
00207
00208 #endif
00209
00210
00211
00212
00213