Einzelnen Beitrag anzeigen

HHennig

Registriert seit: 16. Feb 2007
Ort: Pforzheim
51 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Merkwürdigkeit mit Sleep()

  Alt 26. Sep 2010, 19:14
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!
Hartmut
*
  Mit Zitat antworten Zitat