00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00037 #ifndef RC_JOIN_H_
00038 #define RC_JOIN_H_
00039
00040 #include "ReChannel/core/rc_process.h"
00041
00042 namespace ReChannel {
00043
00047 class rc_join
00048 {
00049 private:
00050 typedef std::vector<rc_process_handle> hproc_vector;
00051
00052 public:
00053 rc_join();
00054
00055 void add_process(rc_process_handle hproc)
00056 { p_hproc_vector.push_back(hproc); }
00057
00058 unsigned int get_process_count()
00059 { return p_hproc_vector.size(); }
00060
00061 void wait();
00062
00063 void reset()
00064 { p_hproc_vector.clear(); }
00065
00066 private:
00067 hproc_vector p_hproc_vector;
00068
00069 private:
00070
00071 rc_join(const rc_join& orig);
00072 rc_join& operator =(const rc_join& orig);
00073 };
00074
00075 }
00076
00077 #define RC_RECONFIGURABLE_FORK \
00078 { \
00079 ::ReChannel::rc_process_handle proc_arr[] = {
00080
00081 #define RC_RECONFIGURABLE_JOIN \
00082 }; \
00083 ::ReChannel::rc_join join; \
00084 for (unsigned int i = 0; \
00085 i < sizeof(proc_arr)/sizeof(::ReChannel::rc_process_handle); \
00086 i++) \
00087 { \
00088 join.add_process(proc_arr[i]); \
00089 } \
00090 join.wait(); \
00091 }
00092
00096 #define RC_FORK \
00097 RC_RECONFIGURABLE_FORK
00098
00102 #define RC_JOIN \
00103 RC_RECONFIGURABLE_JOIN
00104
00105 #endif // RC_JOIN_H_
00106
00107
00108
00109
00110