Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages
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
00040 #ifndef __vtkMultiThreader_h
00041 #define __vtkMultiThreader_h
00042
00043 #include "vtkObject.h"
00044
00045 #ifdef VTK_USE_SPROC
00046 #include <sys/types.h>
00047 #include <unistd.h>
00048 #endif
00049
00050 #if defined(VTK_USE_PTHREADS) || defined(VTK_HP_PTHREADS)
00051 #include <pthread.h>
00052 #include <sys/types.h>
00053 #include <unistd.h>
00054 #endif
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 #ifdef VTK_USE_SPROC
00070 typedef int vtkThreadProcessIDType;
00071 #endif
00072
00073
00074
00075
00076
00077 #ifdef VTK_USE_PTHREADS
00078 typedef void *(*vtkThreadFunctionType)(void *);
00079 typedef pthread_t vtkThreadProcessIDType;
00080
00081
00082 #endif
00083
00084 #ifdef VTK_USE_WIN32_THREADS
00085 typedef LPTHREAD_START_ROUTINE vtkThreadFunctionType;
00086 typedef HANDLE vtkThreadProcessIDType;
00087
00088
00089 #endif
00090
00091 #if !defined(VTK_USE_PTHREADS) && !defined(VTK_USE_WIN32_THREADS)
00092 typedef void (*vtkThreadFunctionType)(void *);
00093 typedef int vtkThreadProcessIDType;
00094
00095
00096 #endif
00097
00098
00099 class vtkMutexLock;
00100
00101 class VTK_COMMON_EXPORT vtkMultiThreader : public vtkObject
00102 {
00103 public:
00104 static vtkMultiThreader *New();
00105
00106 vtkTypeRevisionMacro(vtkMultiThreader,vtkObject);
00107 void PrintSelf(ostream& os, vtkIndent indent);
00108
00120
00121 #define ThreadInfoStruct vtkMultiThreader::ThreadInfo
00122 class ThreadInfo
00123 {
00124 public:
00125 int ThreadID;
00126 int NumberOfThreads;
00127 int *ActiveFlag;
00128 vtkMutexLock *ActiveFlagLock;
00129 void *UserData;
00130 };
00131
00132
00134
00137 vtkSetClampMacro( NumberOfThreads, int, 1, VTK_MAX_THREADS );
00138 vtkGetMacro( NumberOfThreads, int );
00140
00142
00145 static void SetGlobalMaximumNumberOfThreads(int val);
00146 static int GetGlobalMaximumNumberOfThreads();
00148
00150
00153 static void SetGlobalDefaultNumberOfThreads(int val);
00154 static int GetGlobalDefaultNumberOfThreads();
00156
00157
00158
00159
00160
00161
00164 void SingleMethodExecute();
00165
00169 void MultipleMethodExecute();
00170
00175 void SetSingleMethod(vtkThreadFunctionType, void *data );
00176
00179 void SetMultipleMethod( int index, vtkThreadFunctionType, void *data );
00180
00184 int SpawnThread( vtkThreadFunctionType, void *data );
00185
00187 void TerminateThread( int thread_id );
00188
00189
00190 protected:
00191 vtkMultiThreader();
00192 ~vtkMultiThreader();
00193
00194
00195 int NumberOfThreads;
00196
00197
00198
00199
00200 ThreadInfo ThreadInfoArray[VTK_MAX_THREADS];
00201
00202
00203 vtkThreadFunctionType SingleMethod;
00204 vtkThreadFunctionType MultipleMethod[VTK_MAX_THREADS];
00205
00206
00207
00208 int SpawnedThreadActiveFlag[VTK_MAX_THREADS];
00209 vtkMutexLock *SpawnedThreadActiveFlagLock[VTK_MAX_THREADS];
00210 vtkThreadProcessIDType SpawnedThreadProcessID[VTK_MAX_THREADS];
00211 ThreadInfo SpawnedThreadInfoArray[VTK_MAX_THREADS];
00212
00213
00214
00215
00216 void *SingleData;
00217 void *MultipleData[VTK_MAX_THREADS];
00218
00219 private:
00220 vtkMultiThreader(const vtkMultiThreader&);
00221 void operator=(const vtkMultiThreader&);
00222 };
00223
00224 #endif
00225
00226
00227
00228
00229