Delphi 2009中的系统正常运行时间

Jim*_*ore 0 delphi winapi delphi-2009

如何编码以查看计算机已运行多长时间.

尽可能简单的代码示例.

RRU*_*RUZ 10

您使用GetTickCount函数查看此示例.

program Ticks;

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils;

function TicksToStr(Ticks: Cardinal): string;    //Convert Ticks to String
var
  aDatetime : TDateTime;
begin
   aDatetime := Ticks  / SecsPerDay / MSecsPerSec;
   Result := Format('%d days, %s', [Trunc(aDatetime), FormatDateTime('hh:nn:ss.z', Frac(aDatetime))]) ;
end;

begin
  try
     Writeln('Time Windows was started '+ TicksToStr(GetTickCount));
     Readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
Run Code Online (Sandbox Code Playgroud)

UPDATE

以其他格式获取信息只需编辑此行,

   Result := Format('%d days, %d hours %d minutes %d seconds ', [Trunc(aDatetime), HourOf(aDatetime),MinuteOf(aDatetime),SecondOf(aDatetime) ]) ;
Run Code Online (Sandbox Code Playgroud)

并添加单位DateUtils.

  • GetTickCount将在49.7天后回绕到零.更好地使用性能计数器'System Up Time',或者在Vista和更高版本上使用GetTickCount64. (4认同)
  • @RE它是一个非常好的,详细的答案,我不需要通过编译器运行它看到它的完美.他已经全面回答了你的问题,所以我建议你接受它. (3认同)
  • @Jim:几天后跟hh:mm:ss.z显然是你想要的. (2认同)

Ger*_*oll 5

请注意,GetTickCount并不是真正为准确性而设计的。

为了获得更可靠的计时,请使用QueryPerformanceCounterQueryPerformanceFrequency api调用:

function SysUpTime : TDateTime;
var
  Count, Freq : int64;
begin
  QueryPerformanceCounter(count);
  QueryPerformanceFrequency(Freq);
  if (count<> 0) and (Freq <> 0) then
  begin
    Count := Count div Freq;
    Result := Count / SecsPerDay;
  end
  else
    Result := 0;
end;
Run Code Online (Sandbox Code Playgroud)