Base class for all classes to be transmitted by PVM++.
![]() | AutomaticUnPack () installs the "unpack on receive" action, ie. |
![]() | InstallHandler (PvmHandlerFunc Func) installs the handler Func as a message handler for all messages of the current message type. |
![]() | NormalReceive () switches back to normal mode of operation, ie. |
![]() | Receive (PvmTask &From = IgnoreTask) receives a message of the given type and returns the id of the sender in From. |
![]() | ReceiveAction (const PvmReceiveAction &What) sets the new action on receive for the current message type to What. |
![]() | ReceiveFrom (const PvmTaskSet &FromSet, PvmTask &From = IgnoreTask) receives a message of the given type, but only from one of the tasks given by FromSet, and returns the id of the sender in From. |
![]() | ReceiveFrom (PvmTask From) receives a message of the given type, but only from the task From. |
![]() | Send (PvmTask To) const sends the message to task To. |
![]() | Send (const PvmTaskSet &To) const sends the message to all tasks in the set To. |
![]() | SwallowOnReceive () installs the "swallow on receive" action, ie. |
![]() | TimedReceive (unsigned long int &Time, PvmTask &From = IgnoreTask) receives a message of the given type and returns the id of the sender in From. |
![]() | TimedReceiveFrom (const PvmTaskSet &FromSet, unsigned long int &Time, PvmTask &From = IgnoreTask) receives a message of the given type, but only from one of the tasks given by FromSet, and returns the id of the sender in From. |
![]() | TimedReceiveFrom (PvmTask From, unsigned long int &Time) receives a message of the given type, but only from the task From. |
Base class for all classes to be transmitted by PVM++.Every struct (or class, for that matter) that should be sent between tasks must be publically derived from PvmStruct. And it has to register all its members, that should be transmitted, to PVM++. Finally it has to provide a tag, which is used internally in PVM++ to determine the type of a message upon arrival, just like in PVM. It is very important not to use one number for different classes and to use the same number for the same type in the different communicating programs! For example a definition could look like this:
struct Test : public PvmStruct { PvmSetStructId (42); // Setting the Tag for this struct. // Don't use twice!! PvmRegistration () { PvmRegister (Data); PvmRegister (Character); PvmRegister (DoubleArray, 187); PvmRegister (Host); PvmRegister (IntSet); } int Data; char Character; double DoubleArray[187]; PvmHost Host; set< int > IntSet; };As you can see, STL types can be used and will be transmitted correctly, if they are registered and if the template arguments (i.e. int in set< int >) can be registered. The following list shows all types, that can be registered (and therefore transmitted):
- bool.
- char.
- unsigned char.
- short int.
- int.
- float.
- double.
- long int.
- unsigned short.
- unsigned int.
- unsigned long int.
- string.
- float_complex.
- double_complex.
- PvmHost.
- PvmHostSet.
- PvmTask.
- PvmTaskSet.
- pair< First, Second >, if First and Second can be registered.
- vector< Key >, if Key can be registered.
- list< Key >, if Key can be registered.
- stack< Key >, if Key can be registered.
- deque< Key >, if Key can be registered.
- set< Key >, if Key can be registered.
- multiset< Key >, if Key can be registered (not for gcc 2.7.2).
- map< Key >, if Key can be registered.
- multimap< Key >, if Key can be registered (not for gcc 2.7.2).
- Classes derived from PvmStruct.
- Classes derived from PvmCustom.
Arrays for all of the above types (except PvmStruct and PvmCustom, where it isn't possible due to inheritance) are supported as well. The corresponding syntax is PvmRegister (type PointerToArray, int Size).
Alphabetic index Hierarchy of classes