Attendre x secondes dans une boucle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 867 fois - Téléchargée 33 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

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
33
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.
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
oups, c'était http://www.asmfr.com/article.aspx?Val=130 ... désolé :s
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Version en ASM inline, non bloquante : http://www.asmfr.com/article.aspx?Val=131
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
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
Messages postés
4
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
8 septembre 2003

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.