var
.., System.Diagnostics;
type
IAutoStopWatch = interface procedure Start; function Stop: string; end; TAutoStopWatch = class(TInterfacedObject, IAutoStopWatch) private FStopWatch : TStopWatch; public procedure Start; function Stop: string; constructor Create(isStart: Boolean = True); destructor Destroy; override; end;
{ TAutoStopWatch } constructor TAutoStopWatch.Create(isStart: Boolean); begin FStopWatch := TStopWatch.Create; if isStart then begin FStopWatch.Reset; FStopWatch.Start; end; end; destructor TAutoStopWatch.Destroy; begin if FStopWatch.IsRunning then begin FStopWatch.Stop; ShowMessage(FormatDateTime('hh:nn:ss:zzz', FStopWatch.ElapsedMilliseconds/MSecsPerDay)); end; end; procedure TAutoStopWatch.Start; begin FStopWatch.Reset; FStopWatch.Start; end; function TAutoStopWatch.Stop: string; begin FStopWatch.Stop; Result := FormatDateTime('hh:nn:ss:zzz', FStopWatch.ElapsedMilliseconds/MSecsPerDay); end;
Ex)
var
StopWatch : IStopWatch;
begin
StopWatch := TAutoStopWatch.Create;
{To do}
//함수 종료 후 걸린 시간을 ShowMessage로 보여줌.
end;
var
StopWatch : IStopWatch;
begin
StopWatch := TAutoStopWatch.Create(False);
..
StopWatch.Start;
{To Do}
ShowMessage(StopWatch.Stop);
..
StopWatch.Start
{To Do}
//Stop을 호출하지 않으면 함수 종료 후 걸린 시간을 ShowMessage로 보여줌.
end;