diff options
Diffstat (limited to 'src/minicron.h')
| -rw-r--r-- | src/minicron.h | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/src/minicron.h b/src/minicron.h index b100ad0..3e6beea 100644 --- a/src/minicron.h +++ b/src/minicron.h | |||
| @@ -30,6 +30,12 @@ namespace Bu | |||
| 30 | * By default a job will continually reschedule itself after being run | 30 | * By default a job will continually reschedule itself after being run |
| 31 | * unless it calls stop() on it's job object, it is removed using | 31 | * unless it calls stop() on it's job object, it is removed using |
| 32 | * removeJob() on the cron object, or it is added with addJobOnce. | 32 | * removeJob() on the cron object, or it is added with addJobOnce. |
| 33 | * | ||
| 34 | *@todo A minor change to the job execution system could allow a Timer to | ||
| 35 | * defer or reschedule execution instead of the job executing. This would, | ||
| 36 | * in effect, allow us to do every type of interesting scheduling that | ||
| 37 | * systems like fcron offer, including time constrained load-balanced | ||
| 38 | * execution. | ||
| 33 | */ | 39 | */ |
| 34 | class MiniCron | 40 | class MiniCron |
| 35 | { | 41 | { |
| @@ -89,16 +95,35 @@ namespace Bu | |||
| 89 | */ | 95 | */ |
| 90 | virtual void removeJob( JobId jid ); | 96 | virtual void removeJob( JobId jid ); |
| 91 | 97 | ||
| 98 | /** | ||
| 99 | * The baseclass for timer/schedulers for MiniCron jobs. Classes that | ||
| 100 | * inherit from this are used to determine when jobs will run and at | ||
| 101 | * what interval. | ||
| 102 | */ | ||
| 92 | class Timer | 103 | class Timer |
| 93 | { | 104 | { |
| 94 | public: | 105 | public: |
| 95 | Timer(); | 106 | Timer(); |
| 96 | virtual ~Timer(); | 107 | virtual ~Timer(); |
| 97 | 108 | ||
| 109 | /** | ||
| 110 | * Called by MiniCron when each job is run to determine the next | ||
| 111 | * time that a job should be run. When a job is run, this function | ||
| 112 | * is actually called before the job is executed again so that the | ||
| 113 | * job can tell when the next time it will be run will be. | ||
| 114 | */ | ||
| 98 | virtual time_t nextTime()=0; | 115 | virtual time_t nextTime()=0; |
| 116 | |||
| 117 | /** | ||
| 118 | * This function should return a copy of the child class. | ||
| 119 | */ | ||
| 99 | virtual Timer *clone() const = 0; | 120 | virtual Timer *clone() const = 0; |
| 100 | }; | 121 | }; |
| 101 | 122 | ||
| 123 | /** | ||
| 124 | * Execute the job every tInterval seconds, also you can delay the | ||
| 125 | * first run by a different amount of time from the job's creation. | ||
| 126 | */ | ||
| 102 | class TimerInterval : public Timer | 127 | class TimerInterval : public Timer |
| 103 | { | 128 | { |
| 104 | public: | 129 | public: |
| @@ -113,6 +138,23 @@ namespace Bu | |||
| 113 | time_t tInterval; | 138 | time_t tInterval; |
| 114 | }; | 139 | }; |
| 115 | 140 | ||
| 141 | /** | ||
| 142 | * A much more general timer class that can be used for much more | ||
| 143 | * "cron-like" functionality. The constructor takes a string that | ||
| 144 | * describes the times that the job should be run. At the moment the | ||
| 145 | * following schemes are understood: | ||
| 146 | * | ||
| 147 | * "daily [hour] [minute]" | ||
| 148 | * "hourly [minute]" | ||
| 149 | * "weekly [day] [hour] [minute]" | ||
| 150 | * | ||
| 151 | * In these examples each word in [brackets] represents a number that | ||
| 152 | * matches the data type in the brackets. [day] is the number of days | ||
| 153 | * since sunday, 0-6. You can also use lowercase three character | ||
| 154 | * abbreviations for the day names. | ||
| 155 | * | ||
| 156 | * Many more forms follow. | ||
| 157 | */ | ||
| 116 | class TimerBasic : public Timer | 158 | class TimerBasic : public Timer |
| 117 | { | 159 | { |
| 118 | public: | 160 | public: |
| @@ -142,13 +184,21 @@ namespace Bu | |||
| 142 | Bu::FString sSpec; | 184 | Bu::FString sSpec; |
| 143 | }; | 185 | }; |
| 144 | 186 | ||
| 187 | /** | ||
| 188 | * Represents a MiniCron Job. This class is used for both internal | ||
| 189 | * job management as well as job slot interaction and control. Objects | ||
| 190 | * of this class are passed into the slots that are signaled when a job | ||
| 191 | * is executed. | ||
| 192 | */ | ||
| 145 | class Job | 193 | class Job |
| 146 | { | 194 | { |
| 147 | friend class Bu::MiniCron; | 195 | friend class Bu::MiniCron; |
| 148 | public: | 196 | private: |
| 149 | Job( JobId jid, bool bRepeat=true ); | 197 | Job( JobId jid, bool bRepeat=true ); |
| 150 | virtual ~Job(); | 198 | virtual ~Job(); |
| 151 | 199 | ||
| 200 | public: | ||
| 201 | |||
| 152 | /** | 202 | /** |
| 153 | * Execute this job once, increment the runcount and schedule the | 203 | * Execute this job once, increment the runcount and schedule the |
| 154 | * next occurance of it. | 204 | * next occurance of it. |
