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
00032
#ifndef __vtkSharedMemoryCommunicator_h
00033
#define __vtkSharedMemoryCommunicator_h
00034
00035
#include "vtkCommunicator.h"
00036
00037
class vtkThreadedController;
00038
class vtkSharedMemoryCommunicatorMessage;
00039
class vtkSimpleCriticalSection;
00040
00041 class VTK_PARALLEL_EXPORT vtkSharedMemoryCommunicator :
public vtkCommunicator
00042 {
00043
public:
00044 vtkTypeRevisionMacro( vtkSharedMemoryCommunicator,
vtkCommunicator);
00045
00047
static vtkSharedMemoryCommunicator*
New();
00048
00049
virtual void PrintSelf(ostream& os,
vtkIndent indent);
00050
00052
00054
virtual int Send(
int* data,
int length,
int remoteThreadId,
int tag);
00055
virtual int Send(
unsigned long* data,
int length,
int remoteThreadId,
00056
int tag);
00057
virtual int Send(
char* data,
int length,
int remoteThreadId,
int tag);
00058
virtual int Send(
unsigned char* data,
int length,
int remoteThreadId,
int tag);
00059
virtual int Send(
float* data,
int length,
int remoteThreadId,
int tag);
00060
virtual int Send(
double* data,
int length,
int remoteThreadId,
int tag);
00061
#ifdef VTK_USE_64BIT_IDS
00062
virtual int Send(
vtkIdType* data,
int length,
int remoteThreadId,
int tag);
00064
#endif
00065
virtual int Send(
vtkDataObject* data,
int remoteThreadId,
int tag);
00066
virtual int Send(
vtkDataArray* data,
int remoteThreadId,
int tag);
00067
00069
00072
virtual int Receive(
int* data,
int length,
int remoteThreadId,
00073
int tag);
00074
virtual int Receive(
unsigned long* data,
int length,
00075
int remoteThreadId,
int tag);
00076
virtual int Receive(
char* data,
int length,
int remoteThreadId,
00077
int tag);
00078
virtual int Receive(
unsigned char* data,
int length,
int remoteThreadId,
00079
int tag);
00080
virtual int Receive(
float* data,
int length,
int remoteThreadId,
00081
int tag);
00082
virtual int Receive(
double* data,
int length,
int remoteThreadId,
00083
int tag);
00084
#ifdef VTK_USE_64BIT_IDS
00085
virtual int Receive(
vtkIdType* data,
int length,
int remoteThreadId,
00086
int tag);
00088
#endif
00089
virtual int Receive(
vtkDataObject *data,
int remoteThreadId,
int tag);
00090
virtual int Receive(
vtkDataArray *data,
int remoteThreadId,
int tag);
00091
00092
00093
00094
friend class vtkThreadedController;
00095
00096
00097
00098
protected:
00099
00100 int NumberOfThreads;
00101 int Initialized;
00102
void Initialize(
int nThreads,
int forceDeepCopy);
00103
00104 int LocalThreadId;
00105 int WaitingForId;
00106
00107 int ForceDeepCopy;
00108
00109
00110
00111
00112 vtkSimpleCriticalSection* MessageListLock;
00113
00114
00115
00116 vtkSharedMemoryCommunicator** Communicators;
00117
00118 vtkSharedMemoryCommunicator* Parent;
00119
00120
00121 vtkSharedMemoryCommunicatorMessage *MessageListStart;
00122 vtkSharedMemoryCommunicatorMessage *MessageListEnd;
00123
00124 vtkSharedMemoryCommunicator();
00125 ~vtkSharedMemoryCommunicator();
00126
00127
00128
int Send(
vtkDataObject* object,
void *data,
int dataLength,
00129
int remoteThreadId,
int tag);
00130
int Receive(
vtkDataObject* object,
void *data,
int dataLength,
00131
int remoteThreadId,
int tag);
00132
00133
int Send(
vtkDataArray* object,
int dataLength,
00134
int remoteThreadId,
int tag);
00135
int Receive(
vtkDataArray* object,
int dataLength,
00136
int remoteThreadId,
int tag);
00137
00138 vtkSharedMemoryCommunicatorMessage* NewMessage(
vtkDataObject* object,
00139
void* data,
00140
int dataLength);
00141 vtkSharedMemoryCommunicatorMessage* NewMessage(
vtkDataArray* object,
00142
void* data,
00143
int dataLength);
00144
void DeleteMessage(vtkSharedMemoryCommunicatorMessage *message);
00145
void AddMessage(vtkSharedMemoryCommunicatorMessage *message);
00146 vtkSharedMemoryCommunicatorMessage* FindMessage(
int sendId,
int tag);
00147
00148
#ifdef _WIN32
00149
00150
00151 HANDLE MessageSignal;
00152
#else
00153
00154
00155 vtkSimpleCriticalSection* Gate;
00156
#endif
00157
00158
void SignalNewMessage(vtkSharedMemoryCommunicator* receiveCommunicator);
00159
00160
void WaitForNewMessage();
00161
00162
private:
00163 vtkSharedMemoryCommunicator(
const vtkSharedMemoryCommunicator&);
00164
void operator=(
const vtkSharedMemoryCommunicator&);
00165 };
00166
00167
#endif // __vtkSharedMemoryCommunicator_h