Browse Source

TScheduledTasks new schedule methods

Unknown 6 years ago
parent
commit
5aa1206b56
1 changed files with 48 additions and 0 deletions
  1. 48 0
      Quick.Threads.pas

+ 48 - 0
Quick.Threads.pas

@@ -39,6 +39,7 @@ uses
   Types,
   Types,
   SysUtils,
   SysUtils,
   DateUtils,
   DateUtils,
+  Quick.Commons,
   //Quick.Chrono,
   //Quick.Chrono,
   Quick.Value,
   Quick.Value,
   {$IFNDEF FPC}
   {$IFNDEF FPC}
@@ -227,10 +228,15 @@ type
     procedure DoExpire;
     procedure DoExpire;
     function GetTaskName : string;
     function GetTaskName : string;
     function StartAt(aStartDate : TDateTime) : IScheduledTask;
     function StartAt(aStartDate : TDateTime) : IScheduledTask;
+    function StartTodayAt(aHour, aMinute: Word; aSecond : Word = 0): IScheduledTask;
+    function StartTomorrowAt(aHour, aMinute: Word; aSecond : Word = 0): IScheduledTask;
+    function StartOnDayChange : IScheduledTask;
     procedure RunOnce;
     procedure RunOnce;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aEndTime : TDateTime); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aEndTime : TDateTime); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aRepeatTimes : Integer); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aRepeatTimes : Integer); overload;
+    procedure RepeatEveryDay;
+    procedure RepeatEveryWeek;
     function IsFinished : Boolean;
     function IsFinished : Boolean;
     procedure Cancel;
     procedure Cancel;
     property Name : string read GetTaskName;
     property Name : string read GetTaskName;
@@ -310,10 +316,15 @@ type
     function OnExpired(aTaskProc : TTaskProc) : IScheduledTask; virtual;
     function OnExpired(aTaskProc : TTaskProc) : IScheduledTask; virtual;
     function OnExpired_Sync(aTaskProc : TTaskProc) : IScheduledTask; virtual;
     function OnExpired_Sync(aTaskProc : TTaskProc) : IScheduledTask; virtual;
     function StartAt(aStartDate : TDateTime) : IScheduledTask;
     function StartAt(aStartDate : TDateTime) : IScheduledTask;
+    function StartTodayAt(aHour, aMinute: Word; aSecond : Word = 0): IScheduledTask;
+    function StartTomorrowAt(aHour, aMinute: Word; aSecond : Word = 0): IScheduledTask;
+    function StartOnDayChange : IScheduledTask;
     procedure RunOnce;
     procedure RunOnce;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aEndTime : TDateTime); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aEndTime : TDateTime); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aRepeatTimes : Integer); overload;
     procedure RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aRepeatTimes : Integer); overload;
+    procedure RepeatEveryDay;
+    procedure RepeatEveryWeek;
     function IsFinished : Boolean;
     function IsFinished : Boolean;
     procedure Cancel;
     procedure Cancel;
   end;
   end;
@@ -1238,6 +1249,33 @@ begin
   fNextExecution := aStartDate;
   fNextExecution := aStartDate;
 end;
 end;
 
 
+function TScheduledTask.StartOnDayChange: IScheduledTask;
+begin
+  Result := Self;
+  ClearSchedule;
+  fScheduleMode := TScheduleMode.smRunOnce;
+  fStartDate := ChangeTimeOfADay(Tomorrow(),0,0,0);
+  fNextExecution := fStartDate;
+end;
+
+function TScheduledTask.StartTodayAt(aHour, aMinute: Word; aSecond : Word = 0): IScheduledTask;
+begin
+  Result := Self;
+  ClearSchedule;
+  fScheduleMode := TScheduleMode.smRunOnce;
+  fStartDate := ChangeDateOfADay(Now(),aHour,aMinute,aSecond);
+  fNextExecution := fStartDate;
+end;
+
+function TScheduledTask.StartTomorrowAt(aHour, aMinute: Word; aSecond : Word = 0): IScheduledTask;
+begin
+  Result := Self;
+  ClearSchedule;
+  fScheduleMode := TScheduleMode.smRunOnce;
+  fStartDate := ChangeTimeOfADay(Tomorrow(),aHour,aMinute,aSecond);
+  fNextExecution := fStartDate;
+end;
+
 procedure TScheduledTask.RepeatEvery(aInterval: Integer; aTimeMeasure: TTimeMeasure);
 procedure TScheduledTask.RepeatEvery(aInterval: Integer; aTimeMeasure: TTimeMeasure);
 begin
 begin
   if fStartDate = 0.0 then ClearSchedule;
   if fStartDate = 0.0 then ClearSchedule;
@@ -1261,6 +1299,16 @@ begin
   fEnabled := True;
   fEnabled := True;
 end;
 end;
 
 
+procedure TScheduledTask.RepeatEveryDay;
+begin
+  RepeatEvery(1,tmDays);
+end;
+
+procedure TScheduledTask.RepeatEveryWeek;
+begin
+  RepeatEvery(7,tmDays);
+end;
+
 procedure TScheduledTask.RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aRepeatTimes : Integer);
 procedure TScheduledTask.RepeatEvery(aInterval : Integer; aTimeMeasure : TTimeMeasure; aRepeatTimes : Integer);
 begin
 begin
   if fStartDate = 0.0 then ClearSchedule;
   if fStartDate = 0.0 then ClearSchedule;