Attendre x secondes dans une boucle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 089 fois - Téléchargée 35 fois

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

Ajouter un commentaire Commentaires
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
38
16 oct. 2004 à 10:18
c'est vrai qu'on regrette un peu le "Delay(T);" de turbo pascal sur ce coup la.
tout comme "Sound(F,T);"...

ah si seulement mon DX2-66 fonctionnait encore.
cs_Nebula
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
20 août 2003 à 16:34
oups, c'était http://www.asmfr.com/article.aspx?Val=130 ... désolé :s
cs_Nebula
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
20 août 2003 à 16:30
Version en ASM inline, non bloquante : http://www.asmfr.com/article.aspx?Val=131
cs_Nebula
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
9 juin 2003 à 14:45
Je crois pas non, à moins de la mettre en asm directement :-/

D'ailleurs j'ai posté une version en assembleur inline sur asmfr, mais je savais pas comment y inclure le processmessage...

Si quelqu'un pouvait m'éclairer à ce sujet :p
Yoda222
Messages postés
4
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2003

9 juin 2003 à 14:17
assez bien fait, j'ai aussi fait quelque chose du style dans une de mes application, apres avoir essayé sleep...
mais il y a vraimet pas mieux?

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.