| Description | Uses | Classes, Interfaces, Objects and Records | Functions and Procedures | Types | Constants | Variables |
Things working with time
procedure Delay(MiliSec: Word); |
function TimeTickSecondLater(firstTime, secondTime, timeDelay: TMilisecTime): boolean; |
function TimeTickDiff(firstTime, secondTime: TMilisecTime): TMilisecTime; |
function MilisecTimesAdd(t1, t2: TMilisecTime): TMilisecTime; |
function MilisecTimesSubtract(t1, t2: TMilisecTime): TMilisecTime; |
function GetTickCount: TMilisecTime; |
function DateTimeToAtStr(DateTime: TDateTime): string; |
function ProcessTimerNow: TProcessTimerResult; |
function ProcessTimerDiff(a, b: TProcessTimerResult): TProcessTimerResult; |
procedure ProcessTimerBegin; |
function ProcessTimerEnd: Double; |
function KamTimer: TKamTimerResult; |
TKamTime = Double; |
TMilisecTime = LongWord; |
TProcessTimerResult =
clock_t
; |
TKamTimerResult = Int64; |
TKamTimerFrequency = LongWord; |
MinDateTime: TDateTime = MinDouble; |
ProcessTimersPerSec
=
128
; |
KamTimerFrequency: TKamTimerFrequency = 1000000; |
procedure Delay(MiliSec: Word); |
function TimeTickSecondLater(firstTime, secondTime, timeDelay: TMilisecTime): boolean; |
|
zwraca czy secondTime jest pozniejsze o co najmniej timeDelay od firstTime. first i second Time sa time'ami branymi z GetTickCount, tzn. czas jest w zakresie Dword i moze sie przewinac. Tzn. kazdy czas jest rozumiany jako Later - natomiast sprawdzane jest czy czas jest pozniejszy o timeDelay. TimeTickSecond(x, x, 0) = true (czas x jest pozniejszy od x o 0 = true). |
function TimeTickDiff(firstTime, secondTime: TMilisecTime): TMilisecTime; |
|
zwraca roznice czasow secondTime-firstTime. Czasy sa brane z GetTickCount czyli sa Dwordami i moga sie przewinac. |
function MilisecTimesAdd(t1, t2: TMilisecTime): TMilisecTime; |
|
dodawanie i odejmowanie dwoch czasow. Zwroc uwage na brak precyzji : czy TMilisecTime to punkt w czasie czy okres czasu ? Nie jest to zdefiniowane, bo moze byc dowolnie. Mozesz dodac punkt czasu do okresu czasu albo dwa okresy czasu, albo dwa punkty czasu i nawet jesli to ostatnie jest bez sensu - z punktu widzenia ponizszych funkcji nie istnieje rozroznienie miedzy tymi operacjami. Przy okazji mozna zauwazyc ze skoro wynik odejmowania tez jest TMilisecTime to jesli odejmujesz dwa czasy od siebie na pewno otrzymasz wynik dodatni (innymi slowy, jezeli chcesz odjac czas mniejszy od wiekszego to funkcja ponizej zachowa sie jakby uznala ze czas sie musial "przewinac". |
function MilisecTimesSubtract(t1, t2: TMilisecTime): TMilisecTime; |
function GetTickCount: TMilisecTime; |
|
czas od uruchomienia systemu w milisekundach (przewija sie co 49 dni) |
function DateTimeToAtStr(DateTime: TDateTime): string; |
|
zamien DateTime na "at" string czyli string w postaci "data at time". Czesto uzywam takiego formatu. |
function ProcessTimerNow: TProcessTimerResult; |
|
Values below were choosen experimentally for Linux and FreeBSD (and I know that on most UNIXes it should be 128, that's a traditional value) |
function ProcessTimerDiff(a, b: TProcessTimerResult): TProcessTimerResult; |
procedure ProcessTimerBegin; |
function ProcessTimerEnd: Double; |
function KamTimer: TKamTimerResult; |
|
KamTimerFrequency says how much Implementation details: Under Unix this uses gettimeofday. Under Windows this uses QueryPerformanceCounter/Frequency, unless WinAPI "performance timer" is not available, then standard GetTickCount is used. |
TMilisecTime = LongWord; |
|
nie robiac Process messages |
TProcessTimerResult =
clock_t
; |
TKamTimerResult = Int64; |
TKamTimerFrequency = LongWord; |
MinDateTime: TDateTime = MinDouble; |
ProcessTimersPerSec
=
128
; |
KamTimerFrequency: TKamTimerFrequency = 1000000; |