Zitat von
stoxx:
na es gibt noch einen Multimedia Timer in der
unit
Dennoch ist Windows kein Realtime Betriebssystem
Nach meinem Wissen wird ein Thread sowieso nur alle 25 ms bedient (Weiss nicht ob die Zahl richtig ist, was sagen die Fachleute ? )
Wenn also windows gerade was auf der Festplatte sucht, kann wiedermal länger dauern
Kann ich mir nicht vorstellen.
Normaler Timer basiert auf der Interrupt 1ch der wird 18,2 mal pro Sekunde aufgerufen daraus ergiebt sich ein maximales Interval von 55.
Mit WinXp ist der Timer noch etwas schneller geworden dazu weiss ich aber nichts näheres.
Ich bevorzuge Threads für Timer:
Delphi-Quellcode:
type
TTimer = class(TThread)
private
FCount: word;
public
constructor create();
destructor destroy; override;
procedure Execute; override;
procedure start;
published
end;
implementation
procedure TTimer.Execute;
begin
while not Terminated do
begin
Sleep(Fcount);
.........machewas..................
end;
end;
constructor TTimer.create();
begin
inherited create(true);
FCount := 10;
//FreeOnTerminate := true;
start;
end;
destructor TTimer.destroy;
begin
terminate;
inherited destroy;
end;
procedure TTimer.start;
begin
resume;
end;
Das dürfte auf eine 1ms genau sein.
Genauere Ergebnisse könnte man noch damit erzielen hat dann aber 100% CPU belastung:
Delphi-Quellcode:
procedure TTimer.Execute;
var c : int64;
begin
while not Terminated do
begin
QueryPerformanceCounter(c);
if C>=Intervall+altezeit then
begin
QueryPerformanceCounter(altezeit);
....................MAche was...................
end;
end;
end;