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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00046 #ifndef CCXX_GROUPS_H_
00047 #define CCXX_GROUPS_H_
00048
00049 #ifndef CCXX_CONFIG_H_
00050 #include <cc++/config.h>
00051 #endif
00052
00053 #ifndef CCXX_THREAD_H_
00054 #include <cc++/thread.h>
00055 #endif
00056
00057 #ifndef CCXX_FILE_H_
00058 #include <cc++/file.h>
00059 #endif
00060
00061 #ifdef CCXX_NAMESPACES
00062 namespace ost {
00063 #endif
00064
00071 class PluginGroup : public DSO
00072 {
00073 private:
00074 static PluginGroup *firstMember;
00075 PluginGroup *nextMember;
00076
00077 friend CCXX_EXPORT(void) removePlugins(PluginGroup *group = NULL);
00078 friend CCXX_EXPORT(void) loadPlugins(PluginGroup *group, const char *path, const char *ext, bool flag);
00079 friend inline void loadPlugins(const char *path, const char *ext, bool flag)
00080 {loadPlugins(PluginGroup::firstMember, path, ext, flag);};
00081
00082
00083 public:
00084 CCXX_MEMBER_EXPORT(CCXX_EMPTY) PluginGroup(const char *path, bool resolve = true);
00085 CCXX_MEMBER_EXPORT(CCXX_EMPTY) PluginGroup(PluginGroup **grp, const char *path, bool resolve = true);
00086 };
00087
00095 class TimedGroup
00096 {
00097 private:
00098 static TimedGroup *firstMember;
00099 TimedGroup *nextMember;
00100 #ifdef __BORLANDC__
00101 std::time_t nextRun;
00102 #else
00103 time_t nextRun;
00104 #endif
00105
00106 friend CCXX_EXPORT(void) runTimed(TimedGroup *grp = NULL);
00107
00108 protected:
00109 CCXX_MEMBER_EXPORT(CCXX_EMPTY) TimedGroup(TimedGroup **group = NULL);
00110
00111 virtual ~TimedGroup() {};
00112
00113 CCXX_MEMBER_EXPORT(bool) isRunnable(void);
00114
00115 virtual void initial(void)
00116 {return;};
00117
00118 virtual void run(void) = 0;
00119
00120 public:
00121 CCXX_MEMBER_EXPORT(void) stop(void);
00122 CCXX_MEMBER_EXPORT(void) start(void);
00123 };
00124
00132 class ThreadGroup : public Thread
00133 {
00134 private:
00135 static ThreadGroup *firstMember;
00136 ThreadGroup *nextMember;
00137
00141 friend CCXX_EXPORT(void) startThreads(ThreadGroup *group = NULL);
00142 friend CCXX_EXPORT(void) stopThreads(ThreadGroup *group = NULL);
00143
00144 protected:
00145 CCXX_MEMBER_EXPORT(CCXX_EMPTY) ThreadGroup(int pri, unsigned stack);
00146 CCXX_MEMBER_EXPORT(CCXX_EMPTY) ThreadGroup(ThreadGroup **group, int pri, unsigned stack);
00147
00148 virtual ~ThreadGroup()
00149 {terminate();};
00150
00151 virtual void stop(void)
00152 {terminate();};
00153
00154 virtual void start(void)
00155 {start();};
00156 };
00157
00158 #ifdef CCXX_NAMESPACES
00159 };
00160 #endif
00161
00162 #endif
00163