2009-10-29 6 views

Répondre

11

Vous utilisez la fonction GetTickCount voir cet exemple.

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. 

MISE À JOUR

pour obtenir les informations dans un autre format que doit modifier cette ligne,

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

et ajoutez l'unité DateUtils.

+0

Cest bon pour quand, mais je dois combien de temps comme 4 jours 3 heures 2 min u voir ce que je veux dire –

+0

Pas que je sache Delphi, mais on dirait qu'il a ça là. – jprete

+2

@Jim: Jours suivis par hh: mm: ss.z est clairement ce que vous voulez. –

3

Notez que GetTickCount n'est pas vraiment conçu pour la précision.

Pour le moment plus fiable, utilisez les QueryPerformanceCounter et QueryPerformanceFrequency appels 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; 
+0

Exactement à quel point votre mesure de disponibilité doit-elle être "précise"?!? –

+0

Pas vraiment vraiment - dépend de ce qu'il veut l'utiliser pour. J'ai l'impression de me rappeler que quelqu'un a dit que GetTickCount pouvait manquer des millsecondes, mais je n'ai aucune preuve de cela - rétrospectivement, je suppose que c'était un non-sens. –

+0

Les résolutions GetTickCount sont généralement [10ms ou 16ms] (https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms724408%28v=vs.85%29.aspx) mais je ne pense pas que compte dans la gamme de jours. – Wodzu