Vergess das mit GetTickCount - zu ungenau. QueryperformanceCounter übriges auch. Das impleziert nämlich dass der Thread nicht unterbrochen wird, was aber bei einem präemptive Betriebssytem wie Windows nicht der Fall sein wird. Es passiert nämlich fogendes:
Delphi-Quellcode:
Start := GetTickCount()
// tu was
Dauer := GetTickCount - Start;
So wenn deinem Thread jetzt zwischen den beiden Zeitmessungen bei // tu was, die CPU entzogen wird, hast du auch die Zeit drin, die dein Thread nichts machen konnte, weil er keine Rechenzeit hatte. Läufen jetzt noch Threads mit höherer Priorität, kann dein Thread für längere Zeit nicht zum Zuge kommen.
Du mußt also die Zeit messen, die dein Thread wirklich damit verbracht hat Anwendungscode auszuführen. Stichwort für des
PSDK/
MSDN: GetThreadTimes.