|
@@ -18,10 +18,46 @@ type
|
|
|
procedure AppendLogTo(const ALog: string);
|
|
|
end;
|
|
|
|
|
|
+ TTimeLog = class
|
|
|
+ private
|
|
|
+ FEndTime: TDateTime;
|
|
|
+ FBeginTime: TDateTime;
|
|
|
+ FName: string;
|
|
|
+ public
|
|
|
+ constructor Create(const AName: string);
|
|
|
+ procedure EndLog;
|
|
|
+
|
|
|
+ property Name: string read FName;
|
|
|
+ property BeginTime: TDateTime read FBeginTime;
|
|
|
+ property EndTime: TDateTime read FEndTime;
|
|
|
+ end;
|
|
|
+
|
|
|
+ TTimeLogManager = class
|
|
|
+ private
|
|
|
+ FLogFolder: string;
|
|
|
+ FLogFile: string;
|
|
|
+ FLogList: TList;
|
|
|
+
|
|
|
+ function FindTimeLog(const AName: string): TTimeLog;
|
|
|
+ function AddTimeLog(const AName: string): TTimeLog;
|
|
|
+ function GetTimeLog(const AName: string): TTimeLog;
|
|
|
+
|
|
|
+ procedure AppendLogTo(const ALog: string);
|
|
|
+ public
|
|
|
+ constructor Create;
|
|
|
+ destructor Destroy; override;
|
|
|
+
|
|
|
+ procedure ClearTimeLog;
|
|
|
+
|
|
|
+ procedure BeginTime(const AName: string);
|
|
|
+ procedure EndTime(const AName: string);
|
|
|
+ end;
|
|
|
+
|
|
|
implementation
|
|
|
|
|
|
uses SysUtils, UtilMethods, Math, ZhAPI;
|
|
|
|
|
|
+
|
|
|
{ TLog }
|
|
|
|
|
|
procedure TLogUtils.AppendLogTo(const ALog: string);
|
|
@@ -60,4 +96,112 @@ begin
|
|
|
inherited;
|
|
|
end;
|
|
|
|
|
|
+{ TTimeLog }
|
|
|
+
|
|
|
+constructor TTimeLog.Create(const AName: string);
|
|
|
+begin
|
|
|
+ FName := AName;
|
|
|
+ FBeginTime := TickCount;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTimeLog.EndLog;
|
|
|
+begin
|
|
|
+ FEndTime := TickCount;
|
|
|
+end;
|
|
|
+
|
|
|
+{ TTimeLogManager }
|
|
|
+
|
|
|
+function TTimeLogManager.AddTimeLog(const AName: string): TTimeLog;
|
|
|
+begin
|
|
|
+ Result := TTimeLog.Create(AName);
|
|
|
+ FLogList.Add(Result);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTimeLogManager.AppendLogTo(const ALog: string);
|
|
|
+var
|
|
|
+ f: TextFile;
|
|
|
+begin
|
|
|
+ try
|
|
|
+ AssignFile(f, FLogFile);
|
|
|
+ if FileExists(FLogFile) then
|
|
|
+ Append(f)
|
|
|
+ else
|
|
|
+ Rewrite(f);
|
|
|
+ Writeln(f, ALog);
|
|
|
+ Flush(f);
|
|
|
+ finally
|
|
|
+ CloseFile(f);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTimeLogManager.BeginTime(const AName: string);
|
|
|
+var
|
|
|
+ vLog: TTimeLog;
|
|
|
+begin
|
|
|
+ vLog := GetTimeLog(AName);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTimeLogManager.ClearTimeLog;
|
|
|
+begin
|
|
|
+ ClearObjects(FLogList);
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TTimeLogManager.Create;
|
|
|
+var
|
|
|
+ vFormatSetting: TFormatSettings;
|
|
|
+begin
|
|
|
+ vFormatSetting.ShortDateFormat := 'yyyy/MM/dd';
|
|
|
+ vFormatSetting.DateSeparator := '-';
|
|
|
+ FLogFolder := GetAppFilePath + 'log';
|
|
|
+ if not DirectoryExists(FLogFolder) then
|
|
|
+ CreateDirectoryInDeep(FLogFolder);
|
|
|
+ FLogFile := FLogFolder + '\' + DateToStr(Date, vFormatSetting) + '.log';
|
|
|
+ FLogList := TList.Create;
|
|
|
+end;
|
|
|
+
|
|
|
+destructor TTimeLogManager.Destroy;
|
|
|
+begin
|
|
|
+ ClearTimeLog;
|
|
|
+ FLogList.Free;
|
|
|
+ inherited;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTimeLogManager.EndTime(const AName: string);
|
|
|
+var
|
|
|
+ vLog: TTimeLog;
|
|
|
+begin
|
|
|
+ vLog := FindTimeLog(AName);
|
|
|
+ if Assigned(vLog) then
|
|
|
+ begin
|
|
|
+ vLog.EndLog;
|
|
|
+ AppendLogTo(Format('%s: %fms', [vLog.Name, vLog.EndTime - vLog.BeginTime]));
|
|
|
+ end
|
|
|
+ else
|
|
|
+ AppendLogTo(Format('Time Log %s not Assigned', [AName]));
|
|
|
+end;
|
|
|
+
|
|
|
+function TTimeLogManager.FindTimeLog(const AName: string): TTimeLog;
|
|
|
+var
|
|
|
+ i: Integer;
|
|
|
+begin
|
|
|
+ Result := nil;
|
|
|
+ for i := 0 to FLogList.Count - 1 do
|
|
|
+ begin
|
|
|
+ if (TTimeLog(FLogList.Items[i])).Name = AName then
|
|
|
+ begin
|
|
|
+ Result := TTimeLog(FLogList.Items[i]);
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TTimeLogManager.GetTimeLog(const AName: string): TTimeLog;
|
|
|
+var
|
|
|
+ vLog: TTimeLog;
|
|
|
+begin
|
|
|
+ vLog := FindTimeLog(AName);
|
|
|
+ if not Assigned(vLog) then
|
|
|
+ vLog := AddTimeLog(AName);
|
|
|
+end;
|
|
|
+
|
|
|
end.
|