Il vous est surement deja arrivé de vouloir attendre X secondes avant l'itération suivante d'une boucle, sans pouvoir utiliser de timer (car dans une boucle), et Sleep bloquant toute l'application, et donc une solution pas des plus commodes...
Cela est arrivé à un ami à moi aujourd'hui, voici la solution que je lui ai proposée, qui je pense servira à d'autres (moi le premier d'ailleurs, lol)
Source / Exemple :
program toto;
{$APPTYPE CONSOLE}
{$E exe}
uses
SysUtils, Windows;
var
i: Integer;
j, k: DWORD; // ces variables sont utilisées pour avoir le temps écoulé
begin
for i := 0 to 10 do begin
writeln('i=', i);
j := GetTickCount; // initialisation du temps de départ
repeat
k := GetTickCount; // récupération du temps courant
until (k - j) > 1000; // itération suivante si 1000ms se sont écoulées
end;
end.
Conclusion :
Ce code donne la meme durée quel que soit le processeur sur lequel il tourne (mon pote avait mis un for j := 0 to 10000 do ; ce qui n'est pas toujours satisfaisant non plus)
Pour éviter de bloquer l'application, un Application.ProcessMessages dans le repeat peut etre ajouté
Voila je crois que c'est tout... Bonne prog' !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.