![]() |
Beschränkung von GetTickCount für Timeout umgehen
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:
Aufruf erfolgt dann so:
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;
Delphi-Quellcode:
So wird in der Schleife nur noch eine Vergleichsoperation durchgeführt = fix :). Wenn man initTimeout mit 0 aufruft, geht die Funktion nie TimeOut.
var
timeOut: cardinal; begin timeOut:= initTimeOut( 5000); repeat {doSomething} until isTimeOut( timeOut); end; Danke fürs lesen :) |
Re: Beschränkung von GetTickCount für Timeout umgehen
Der helle Wahnsinn. Performancetechnisch absoluter Mist, aber ansonsten ...
"nur noch eine Vergleichsoperation durchgeführt = fix" halte ich für ein Gerücht, da dies im Endeffekt immer noch vom Compiler abhängt, solange es nicht in ASM implementiert wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz