CRON Scheduler
Flexible, lightweight CRON compliant scheduler. Works directly from the code. Main features:
- Compatible with most of what CRON is offering
- Setting the CRON is as simple as setting one string. Example bellow.
- It also supports simple intervals in addition to CRON style schedules
- Schedule can have valid from / to limits
- OnSchedule event can be called in a new background thread or in context of main thread
- Very lightweight implementation
The demo bellow shows the basic usage of CRON Scheduler. If you have trouble using the code or have any other questions, please contact me directly using the “Contact” page.
Sample scheduler usage:
procedure TfMain.FormCreate(Sender: TObject); var NewSchedule: TScheduledEvent; begin // clear memo lbEvents.Clear; // crete new event list that will hold events EventList := TSchEventList.Create; // first event NewSchedule := EventList.Add('ScheduleOne'); NewSchedule.Schedule.EventPlan := '0 */2 * * * * *'; NewSchedule.OnScheduleEvent := OnScheduleOneTrigger; NewSchedule.Run; // second event NewSchedule := EventList.Add('ScheduleTwo'); NewSchedule.Schedule.EventPlan := '*/30 * * * * * *'; NewSchedule.OnScheduleEvent := OnScheduleTwoTrigger; NewSchedule.Run; // third event NewSchedule := EventList.Add('ScheduleThree'); NewSchedule.Schedule.EventPlan := '*/5 * * * * * *'; NewSchedule.OnScheduleEvent := OnScheduleThreeTrigger; NewSchedule.Run; // fourth event NewSchedule := EventList.Add('ScheduleFour'); NewSchedule.Schedule.EventPlan := '15 * * * * * *'; NewSchedule.OnScheduleEvent := OnScheduleFourTrigger; NewSchedule.Run; // start stop dynamic event FDynamicEvent := EventList.Add('DynamicSchedule'); FDynamicEvent.Schedule.EventPlan := '*/5 * * * * * *'; FDynamicEvent.OnScheduleEvent := OnDynamicScheduleTrigger; Caption := Format('Started at : %s ( Press ''d'' for dynamic event )', [DateTimeToStr(Now)]); end;
Event handlers:
procedure TfMain.OnDynamicScheduleTrigger(Sender: TScheduledEvent); begin lbEvents.Items.Add(Format('Dynamic event was trigered at : %s', [DateTimeToStr(now)])); end; procedure TfMain.OnScheduleFourTrigger(Sender: TScheduledEvent); begin lbEvents.Items.Add(Format('Event four was trigered at : %s', [DateTimeToStr(now)])); end; procedure TfMain.OnScheduleOneTrigger(Sender: TScheduledEvent); begin lbEvents.Items.Add(Format('Event one was trigered at : %s', [DateTimeToStr(now)])); end;
Example how to use From / To valid range. The event will fire for one year, every sunday, every second hour, but only on 1,5 and 10 month in the year.
NewSchedule := EventList.Add('ScheduleOne'); NewSchedule.Schedule.EventPlan := '0 0 */2 * 1,5,10 7 *'; NewSchedule.OnScheduleEvent := OnScheduleOneTrigger; NewSchedule.Schedule.ValidFrom := EncodeDate(2010, 1, 1); NewSchedule.Schedule.ValidTo := EncodeDate(2010, 12, 31); NewSchedule.Run;
Example how to fire an event at an 2 hour interval from teh start of the schedule. Each event will be fired in a new thread.
NewSchedule := EventList.Add('ScheduleOne'); NewSchedule.Schedule.SetInterval(0, 0, 2, 0, 0, 0); NewSchedule.OnScheduleEvent := OnScheduleOneTrigger; NewSchedule.SignalType := stThreaded; NewSchedule.Run;
Change Log
- 2.0.2
- fixed a bug in valid interval calculation