[JEDI.NET-commits] main/run Jedi.IO.IniFiles.pas,1.2,1.3
Status: Pre-Alpha
Brought to you by:
jedi_mbe
From: Marcel B. <jed...@us...> - 2005-01-25 10:27:48
|
Update of /cvsroot/jedidotnet/main/run In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3468/main/run Modified Files: Jedi.IO.IniFiles.pas Log Message: Updated BufferedIniFile to use the EventScheduler to schedule the AutoReload and AutoFlush. Index: Jedi.IO.IniFiles.pas =================================================================== RCS file: /cvsroot/jedidotnet/main/run/Jedi.IO.IniFiles.pas,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Jedi.IO.IniFiles.pas 23 Jan 2005 11:06:48 -0000 1.2 --- Jedi.IO.IniFiles.pas 25 Jan 2005 10:27:35 -0000 1.3 *************** *** 33,37 **** System.Resources, System.Threading, ! Jedi.System; {$ENDREGION} --- 33,38 ---- System.Resources, System.Threading, ! Jedi.System, ! Jedi.Timers.EventScheduler; {$ENDREGION} *************** *** 470,477 **** {$REGION 'Data'} strict private ! FAutoFlushInterval: Integer; ! FAutoFlushTimer: Timer; ! FAutoReloadInterval: Integer; ! FAutoReloadTimer: Timer; FLastWrite: DateTime; FPath: string; --- 471,476 ---- {$REGION 'Data'} strict private ! FAutoReloadEvent: ScheduledEvent; ! FAutoFlushEvent: ScheduledEvent; FLastWrite: DateTime; FPath: string; *************** *** 523,528 **** {$REGION 'Protected methods'} strict protected ! procedure AutoFlushHandler(state: &Object); ! procedure AutoReloadHandler(state: &Object); procedure FlushImpl; function NeedFlush: Boolean; --- 522,527 ---- {$REGION 'Protected methods'} strict protected ! procedure AutoFlushHandler(event: ScheduledEvent); ! procedure AutoReloadHandler(event: ScheduledEvent); procedure FlushImpl; function NeedFlush: Boolean; *************** *** 532,535 **** --- 531,536 ---- {$REGION 'Property accessors'} public + function get_AutoFlushInterval: Integer; + function get_AutoReloadInterval: Integer; procedure set_AutoFlushInterval(value: Integer); procedure set_AutoReloadInterval(value: Integer); *************** *** 537,542 **** {$REGION 'Properties'} public ! property AutoFlushInterval: Integer read FAutoFlushInterval write set_AutoFlushInterval; ! property AutoReloadInterval: Integer read FAutoReloadInterval write set_AutoReloadInterval; {$ENDREGION} end; --- 538,543 ---- {$REGION 'Properties'} public ! property AutoFlushInterval: Integer read get_AutoFlushInterval write set_AutoFlushInterval; ! property AutoReloadInterval: Integer read get_AutoReloadInterval write set_AutoReloadInterval; {$ENDREGION} end; *************** *** 552,555 **** --- 553,605 ---- {$ENDREGION} + {$REGION 'protected classes'} + type + TimerInfo = class + strict private + FInterval: Int32; + FNextTick: Int64; + public + constructor Create(interval: Int32); + public + procedure CalculateNextTick; overload; + procedure CalculateNextTick(fromLast: Boolean); overload; + public + procedure set_Interval(value: Int32); + public + property Interval: Int32 read FInterval write set_Interval; + property NextTick: Int64 read FNextTick; + end; + {$ENDREGION} + + {$REGION 'TimerInfo'} + constructor TimerInfo.Create(interval: Int32); + begin + inherited Create; + Self.Interval := interval; + end; + + procedure TimerInfo.CalculateNextTick; + begin + CalculateNextTick(True); + end; + + procedure TimerInfo.CalculateNextTick(fromLast: Boolean); + begin + if not fromLast then + FNextTick := DateTime.UtcNow.Ticks + Interval + else + FNextTick := NextTick + Interval; + end; + + procedure TimerInfo.set_Interval(value: Int32); + begin + if value <> FInterval then + begin + FInterval := value; + CalculateNextTick(False); + end; + end; + {$ENDREGION} + {$REGION 'BufferedIniFile'} constructor BufferedIniFile.Create(path: string); *************** *** 563,570 **** FPath := path; ReloadImpl(True); Self.AutoFlushInterval := autoFlushInterval; Self.AutoReloadInterval := autoReloadInterval; - FAutoFlushTimer := Timer.Create(AutoFlushHandler, nil, FAutoFlushInterval, FAutoFlushInterval); - FAutoReloadTimer := Timer.Create(AutoReloadHandler, nil, FAutoReloadInterval, FAutoReloadInterval); end; --- 613,620 ---- FPath := path; ReloadImpl(True); + FAutoFlushEvent := ScheduledEvent.Create(0, AutoFlushHandler); + FAutoReloadEvent := ScheduledEvent.Create(0, AutoReloadHandler); Self.AutoFlushInterval := autoFlushInterval; Self.AutoReloadInterval := autoReloadInterval; end; *************** *** 579,583 **** end; ! procedure BufferedIniFile.AutoFlushHandler(state: &Object); begin Monitor.Enter(Self); --- 629,633 ---- end; ! procedure BufferedIniFile.AutoFlushHandler(event: ScheduledEvent); begin Monitor.Enter(Self); *************** *** 590,594 **** end; ! procedure BufferedIniFile.AutoReloadHandler(state: &Object); begin Monitor.Enter(Self); --- 640,644 ---- end; ! procedure BufferedIniFile.AutoReloadHandler(event: ScheduledEvent); begin Monitor.Enter(Self); *************** *** 633,638 **** procedure BufferedIniFile.Dispose; begin ! FAutoFlushTimer.Dispose; ! FAutoReloadTimer.Dispose; if HasChanges then FlushImpl; --- 683,688 ---- procedure BufferedIniFile.Dispose; begin ! FAutoReloadEvent.Interval := 0; ! FAutoFlushEvent.Interval := 0; if HasChanges then FlushImpl; *************** *** 646,649 **** --- 696,705 ---- end; + procedure BufferedIniFile.Flush; + begin + if HasChanges then + FlushImpl; + end; + procedure BufferedIniFile.FlushImpl; var *************** *** 656,663 **** end; ! procedure BufferedIniFile.Flush; begin ! if HasChanges then ! FlushImpl; end; --- 712,723 ---- end; ! function BufferedIniFile.get_AutoFlushInterval: Integer; begin ! Result := FAutoFlushEvent.Interval div 10000; ! end; ! ! function BufferedIniFile.get_AutoReloadInterval: Integer; ! begin ! Result := FAutoReloadEvent.Interval div 10000; end; *************** *** 746,758 **** procedure BufferedIniFile.set_AutoFlushInterval(value: Integer); begin ! if value < Timeout.Infinite then raise ArgumentOutOfRangeException.Create('AutoFlushInterval', ! MscorlibResources.GetResourceString('ArgumentOutOfRange_NeedNonNegOrNegative1')); ! if value <> FAutoFlushInterval then ! begin ! FAutoFlushInterval := value; ! if Assigned(FAutoFlushTimer) then ! FAutoFlushTimer.Change(value, value); ! end; end; --- 806,813 ---- procedure BufferedIniFile.set_AutoFlushInterval(value: Integer); begin ! if value < 0 then raise ArgumentOutOfRangeException.Create('AutoFlushInterval', ! MscorlibResources.GetResourceString('ArgumentOutOfRange_NeedNonNegNum')); ! FAutoFlushEvent.Interval := 10000 * value; end; *************** *** 761,771 **** if value < Timeout.Infinite then raise ArgumentOutOfRangeException.Create('AutoReloadInterval', ! MscorlibResources.GetResourceString('ArgumentOutOfRange_NeedNonNegOrNegative1')); ! if value <> FAutoReloadInterval then ! begin ! FAutoReloadInterval := value; ! if Assigned(FAutoReloadTimer) then ! FAutoReloadTimer.Change(value, value); ! end; end; --- 816,821 ---- if value < Timeout.Infinite then raise ArgumentOutOfRangeException.Create('AutoReloadInterval', ! MscorlibResources.GetResourceString('ArgumentOutOfRange_NeedNonNegNum')); ! FAutoReloadEvent.Interval := 10000 * value; end; |