blob: 29e972aedc018bf3b52d5ad7d7695e65eb7d7f2f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
unit UTime;
interface
type
TTime = class
constructor Create;
function GetTime: real;
end;
procedure CountSkipTimeSet;
procedure CountSkipTime;
procedure CountMidTime;
procedure TimeSleep(ms: real);
var
USTime: TTime;
TimeFreq: int64;
TimeNew: int64;
TimeOld: int64;
TimeSkip: real;
TimeMid: real;
TimeMidTemp: int64;
implementation
uses Windows;
constructor TTime.Create;
begin
CountSkipTimeSet;
end;
procedure CountSkipTimeSet;
begin
QueryPerformanceFrequency(TimeFreq);
QueryPerformanceCounter(TimeNew);
end;
procedure CountSkipTime;
begin
TimeOld := TimeNew;
QueryPerformanceCounter(TimeNew);
TimeSkip := (TimeNew-TimeOld)/TimeFreq;
end;
procedure CountMidTime;
begin
QueryPerformanceCounter(TimeMidTemp);
TimeMid := (TimeMidTemp-TimeNew)/TimeFreq;
end;
procedure TimeSleep(ms: real);
var
TimeStart: int64;
TimeHalf: int64;
Time: real;
Stop: boolean;
begin
QueryPerformanceCounter(TimeStart);
Stop := false;
while (not Stop) do begin
QueryPerformanceCounter(TimeHalf);
Time := 1000 * (TimeHalf-TimeStart)/TimeFreq;
if Time > ms then Stop := true;
end;
end;
function TTime.GetTime: real;
var
TimeTemp: int64;
begin
QueryPerformanceCounter(TimeTemp);
Result := TimeTemp/TimeFreq;
end;
end.
|