Hi, Ihr habt da 2 schöne Beispiele in eurer Codelibrary. Wollte nur mal zeigen wie ich das gelöst habe. Performance-Counter sind mir zu langsam, da ich timeout-Funktionen auch in schnell rotierenden Schleifen nutze.
Delphi-Quellcode:
function initTimeOut(const msec: cardinal): cardinal;
var
tickSave: cardinal;
begin
if msec>0 then
begin
repeat // hängt am 50igsten tag evtl etwas, aber besser als absturz etc.
tickSave:= getTickCount;
result:= tickSave + msec;
if result< tickSave then sleep(100);
until result >= tickSave;
end
else result:= 0;
end;
function isTimeOut (const timeVal: cardinal): Boolean;
begin
if timeVal=0 then result:= false
else result:= (getTickCount> timeVal);
end;
Aufruf erfolgt dann so:
Delphi-Quellcode:
var
timeOut: cardinal;
begin
timeOut:= initTimeOut( 5000);
repeat {doSomething} until isTimeOut( timeOut);
end;
So wird in der Schleife nur noch eine Vergleichsoperation durchgeführt = fix
. Wenn man initTimeout mit 0 aufruft, geht die Funktion nie TimeOut.
Danke fürs lesen
Wer später bremst ist eher tot.