Vielleicht helfen dir folgende, wohl undokumentiere
API-Funktionen weiter (bisher in keiner Delphi-
Unit deklariert):
Code:
function NTQueryTimerResolution(CoarsestResolution : PULONG;
FinestResolution : PULONG;
ActualResolution : PULONG) : longint; stdcall; external 'ntdll.dll';
function NTSetTimerResolution(RequestedResolution : ULong;
Set_: Boolean;
ActualResolution : PULONG) : longint; stdcall; external 'ntdll.dll';
procedure SetTimerResolutionFinest;
var
CoarsestResolution: ULONG;
FinestResolution: ULONG;
ActualResolution: ULONG;
RequestedResolution: ULONG;
begin
NtQueryTimerResolution(@CoarsestResolution, @FinestResolution, @ActualResolution);
RequestedResolution := FinestResolution;
NtSetTimerResolution(RequestedResolution, True, @ActualResolution);
end;
procedure SetTimerResolutionDefault;
var
CoarsestResolution: ULONG;
FinestResolution: ULONG;
ActualResolution: ULONG;
RequestedResolution: ULONG;
begin
NtQueryTimerResolution(@CoarsestResolution, @FinestResolution, @ActualResolution);
RequestedResolution := CoarsestResolution;
NtSetTimerResolution(RequestedResolution, True, @ActualResolution);
end;
begin
// maximale Resolution setzen
SetTimerResolutionFinest;
// make your job...
// Timer wieder zurücksetzen !
SetTimerResolutionDefault;
end;
Es sollte damit tatsächlich (evtl. annähernd) Sleep(1) = 1ms sein!