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