Einzelnen Beitrag anzeigen

Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#1

Beschränkung von GetTickCount für Timeout umgehen

  Alt 26. Mär 2004, 08:12
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.
  Mit Zitat antworten Zitat