Attendre x secondes dans une boucle

Contenu du snippet

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' !

A voir également

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.