Tuto : technique pour attendre

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 188 fois - Téléchargée 29 fois

Contenu du snippet

Simples recommendations pour faire des boucles d'attente.
Dans ces exemples, on va attendre 5 secondes, mais cela marche pour des valeurs beaucoup plus grandes (par contre pas utilisable en dessous de la seconde).

Technique 1 (avec bug possible) :
---------------------------------------
La technique consiste à utiliser l'instruction (pas l'objet) Timer.
Cette instruction renvoie le nombre de secondes écoulées depuis minuit.
Dim Debut As Long
Debut = Timer
Do While Timer - Debut < 5
DoEvents ' Repasse la main au système en attendant
Loop

Cette technique a un gros inconvénient : à minuit, Timer repasse à zéro : Si vous faites votre boucle vers cette heure là, vous risquez d'attendre longtemps.

Technique 2 (sans bug) :
-----------------------------
Là, on va utiliser la date système pour faire l'attente :

Dim Debut As Date
Debut = Now ' renvoie la date et l'heure courante
Do While Abs(DateDiff("s", MaDate, Now)) < 5
DoEvents ' Repasse la main au système en attendant
Loop

Cette solution a le gros avantage d'être fiable, et de pouvoir attendre des durées quelconques : Il suffit re remplacer "s" (secondes) par une des autres unités de temps :
s Secondes
n Minutes (et pas m)
h Heures
d Jours
m Mois
y Années

Dernière précision :
----------------------
Les puriistes vous dirons que utiliser un DoEvents mange du temps machine; en effet, la boucle est exécutée quelques milliers de fois par secondes.
Certes (y cause bien, hein !), vous pouvez toujours la remplacer la l'API "Sleep" :
Vous mettez cette déclaration dans la partie Déclaration de votre feuille ou module
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
et vous remplacez les "DoEvents" par des "Sleep 1000" qui demandera au système d'attendre 1 seconde (1000 millisecondes) avant de poursuivre.

Vala. En espérant que ça puisse vous servir ...
Jack

A voir également

Ajouter un commentaire Commentaires
85bmx85 Messages postés 16 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 26 mai 2012
16 avril 2008 à 18:54
tant qu'à faire je précise pour ce qui tournent aussi sous express que DoEvents devient Application.DoEvents
a+
85bmx85 Messages postés 16 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 26 mai 2012
16 avril 2008 à 18:52
bonne réponse
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
14 avril 2008 à 16:30
Math.Abs me semble
85bmx85 Messages postés 16 Date d'inscription lundi 24 décembre 2007 Statut Membre Dernière intervention 26 mai 2012
14 avril 2008 à 16:14
Bonjour, a tout hasard si quelqun tombe sur ceci :
je suis en vb express (2008) et M.VB il est pas content car monsieur M.VB il conait pas abs donc tout betement :
c'est quoi l'équivalent?

Sinon rapport au tuto :
pas mal du tout tres bonne idée mais par contre il aurait fallu préciser que sleep ne fait pas juste une pause il stoppe le programme tout entier (plus aucune interaction) comme l'a dit Xya
lolo31400 Messages postés 1 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 18 septembre 2006
18 sept. 2006 à 19:56
bonjour et en pascal une boucle d'attente vous la coderiez comment?

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.