L'EDI Delphi définit de toute évidence la valeur de la minuterie du système à une résolution supérieure. Vous pouvez faire la même chose dans votre application en utilisant les fonctions timeBeginPeriod/timeEndPeriod
. Voir msdn document et aussi this one regarding sleep function
uses MMSystem;
if TimeBeginPeriod(1) = TIMERR_NOERROR then // 1 ms resolution
try
// The action or process needing higher resolution
finally
TimeEndPeriod(1);
end;
Juste pour démontrer l'effet que je fait suite à l'application simple, si toute personne intéressée peut vérifier eux-mêmes:
uses System.DateUtils, MMSystem;
var
s, e: TTime;
procedure SomeDelay;
var
i: integer;
begin
s := Now;
for i := 1 to 1000 do
Sleep(1);
e := Now;
end;
procedure TForm19.btnWithClick(Sender: TObject);
begin
if TimeBeginPeriod(1) = TIMERR_NOERROR then // 1 ms resolution
try
SomeDelay; // The action or process needing higher resolution
finally
TimeEndPeriod(1);
end;
Memo1.Lines.Add('with ' + IntToStr(SecondsBetween(s, e)));
end;
procedure TForm19.btnWithoutClick(Sender: TObject);
begin
SomeDelay; // The action or process needing higher resolution
Memo1.Lines.Add('without ' + IntToStr(SecondsBetween(s, e)));
end;
Sortie:
with 1
without 15
NOTE Parce que e TimeBeginPeriod
affecte la coche du système, assurez-vous de fermer tout programme qui nous permet la même méthode pour modifier la coche de la minuterie, comme les programmes multimédia et similaires (et aussi l'IDE Delphi).
L'appareil cible ne vous comprend peut-être pas? – Victoria
J'ai réussi la transmition plusieurs fois ... et vraiment je ne pouvais pas comprendre le problème ... Lorsque Delphi ouverte la transmission est rapide et fonctionne très bien ... Lorsque vous fermez juste et exécutez exe ... La transmission est lente –
Je me demande pourquoi les downvotes? –