dox/Parallel/vtkSharedMemoryCommunicator.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00036
#ifndef __vtkSharedMemoryCommunicator_h
00037
#define __vtkSharedMemoryCommunicator_h
00038
00039
#include "vtkCommunicator.h"
00040
00041
class vtkThreadedController;
00042
class vtkSharedMemoryCommunicatorMessage;
00043
class vtkSimpleCriticalSection;
00044
00045 class VTK_PARALLEL_EXPORT vtkSharedMemoryCommunicator :
public vtkCommunicator
00046 {
00047
public:
00048 vtkTypeRevisionMacro( vtkSharedMemoryCommunicator,
vtkCommunicator);
00049
00051
static vtkSharedMemoryCommunicator*
New();
00052
00053
virtual void PrintSelf(ostream& os,
vtkIndent indent);
00054
00056
00058
virtual int Send(
int* data,
int length,
int remoteThreadId,
int tag);
00059
virtual int Send(
unsigned long* data,
int length,
int remoteThreadId,
00060
int tag);
00061
virtual int Send(
char* data,
int length,
int remoteThreadId,
int tag);
00062
virtual int Send(
unsigned char* data,
int length,
int remoteThreadId,
int tag);
00063
virtual int Send(
float* data,
int length,
int remoteThreadId,
int tag);
00064
virtual int Send(
double* data,
int length,
int remoteThreadId,
int tag);
00065
#ifdef VTK_USE_64BIT_IDS
00066
virtual int Send(
vtkIdType* data,
int length,
int remoteThreadId,
int tag);
00068
#endif
00069
virtual int Send(
vtkDataObject* data,
int remoteThreadId,
int tag);
00070
virtual int Send(
vtkDataArray* data,
int remoteThreadId,
int tag);
00071
00073
00076
virtual int Receive(
int* data,
int length,
int remoteThreadId,
00077
int tag);
00078
virtual int Receive(
unsigned long* data,
int length,
00079
int remoteThreadId,
int tag);
00080
virtual int Receive(
char* data,
int length,
int remoteThreadId,
00081
int tag);
00082
virtual int Receive(
unsigned char* data,
int length,
int remoteThreadId,
00083
int tag);
00084
virtual int Receive(
float* data,
int length,
int remoteThreadId,
00085
int tag);
00086
virtual int Receive(
double* data,
int length,
int remoteThreadId,
00087
int tag);
00088
#ifdef VTK_USE_64BIT_IDS
00089
virtual int Receive(
vtkIdType* data,
int length,
int remoteThreadId,
00090
int tag);
00092
#endif
00093
virtual int Receive(
vtkDataObject *data,
int remoteThreadId,
int tag);
00094
virtual int Receive(
vtkDataArray *data,
int remoteThreadId,
int tag);
00095
00096
00097
00098
friend class vtkThreadedController;
00099
00100
00101
00102
protected:
00103
00104 int NumberOfThreads;
00105 int Initialized;
00106
void Initialize(
int nThreads,
int forceDeepCopy);
00107
00108 int LocalThreadId;
00109 int WaitingForId;
00110
00111 int ForceDeepCopy;
00112
00113
00114
00115
00116 vtkSimpleCriticalSection* MessageListLock;
00117
00118
00119
00120 vtkSharedMemoryCommunicator** Communicators;
00121
00122 vtkSharedMemoryCommunicator* Parent;
00123
00124
00125 vtkSharedMemoryCommunicatorMessage *MessageListStart;
00126 vtkSharedMemoryCommunicatorMessage *MessageListEnd;
00127
00128 vtkSharedMemoryCommunicator();
00129 ~vtkSharedMemoryCommunicator();
00130
00131
00132
int Send(
vtkDataObject* object,
void *data,
int dataLength,
00133
int remoteThreadId,
int tag);
00134
int Receive(
vtkDataObject* object,
void *data,
int dataLength,
00135
int remoteThreadId,
int tag);
00136
00137
int Send(
vtkDataArray* object,
int dataLength,
00138
int remoteThreadId,
int tag);
00139
int Receive(
vtkDataArray* object,
int dataLength,
00140
int remoteThreadId,
int tag);
00141
00142 vtkSharedMemoryCommunicatorMessage* NewMessage(
vtkDataObject* object,
00143
void* data,
00144
int dataLength);
00145 vtkSharedMemoryCommunicatorMessage* NewMessage(
vtkDataArray* object,
00146
void* data,
00147
int dataLength);
00148
void DeleteMessage(vtkSharedMemoryCommunicatorMessage *message);
00149
void AddMessage(vtkSharedMemoryCommunicatorMessage *message);
00150 vtkSharedMemoryCommunicatorMessage* FindMessage(
int sendId,
int tag);
00151
00152
#ifdef _WIN32
00153
00154
00155 HANDLE MessageSignal;
00156
#else
00157
00158
00159 vtkSimpleCriticalSection* Gate;
00160
#endif
00161
00162
void SignalNewMessage(vtkSharedMemoryCommunicator* receiveCommunicator);
00163
00164
void WaitForNewMessage();
00165
00166
private:
00167 vtkSharedMemoryCommunicator(
const vtkSharedMemoryCommunicator&);
00168
void operator=(
const vtkSharedMemoryCommunicator&);
00169 };
00170
00171
#endif // __vtkSharedMemoryCommunicator_h