Faire une pause dans un programme (prend en charge le passage de minuit)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 014 fois - Téléchargée 39 fois

Contenu du snippet

J'avais besoin de faire une pause dans un de mes programmes.

J'ai donc utilisé la fonction TIMER.
Dans l'aide de MSDN, l'exemple donné n'est pas satisfaisante car elle ne prend pas en charge le passe de minuit.
Il ne faut pas oublier que cette fonction représentant le nombre de secondes écoulées depuis minuit. L'exemple MSDN
PauseTime = 20 ' Durée de la pause.
Start = Timer ' Récuperation de l'heure de début de la pause en secondes.
Do While Timer < Start + PauseTime
DoEvents 'Donne le contrôle à d'autres processus
Loop
Cette exemple n'est pas valable car si il est 23h59min50secondes soit 86390 votre programme restera dans un boucle infini vu qu'a minuit votre Timer passera de 86399 à 0

J'ai donc modifier ce code pour prendre en charge le passage de minuit :

Source / Exemple :


Private PauseTime as Integer
Private Start as Long

'A mettre dans une procédure
PauseTime = 2   ' Durée de la pause.
Start = Timer   ' Récuperation de l'heure de début de la pause en secondes.
If (Start + PauseTime) < 86400 Then 'Test pour éviter le depassement de 60s*60min*24hrs, c'est à dire 86400 secondes, 1 jour
    Do While Timer < Start + PauseTime
        DoEvents 'Donne le contrôle à d'autres processus
    Loop
Else 'Transition entre aujourd'hui et demain
    'Cette boucle permet d'attendre que le timer se positionne à 0 soit 00 hrs 00 min 00 secondes
    Do While Timer > 1 'Mise en attente pour arriver à minuit
        DoEvents
    Loop
    'Le Timer est donc maintenant à 0
    '(PauseTime - (86400 - Start)) permet de réinitialiser le temps restant à la pause par rapport au temps déja écoulé
    Do While Timer < (PauseTime - (86400 - Start))
        DoEvents
    Loop
End If

Conclusion :


Je sais, il existe l'API Sleep.
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Après on met ou on veut faire la pause : Sleep 20000 ' Durée de la pause en millisecondes.
Le probleme c'est qu'elle garde la main pendant la durée de la pause et donc si votre application affiche l'heure, celle-ci restera figé durant le temps de la pause se qui n'est pas agréable.

Bonne prog à tous

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
lundi 14 février 2005
Statut
Membre
Dernière intervention
29 juin 2010

plus imple...

Public Sub Pause(ByVal Duree As Single, Optional ByVal bloque As Boolean = False)
Dim Debut, courant As Single
Debut = Timer
Do
If Not bloque Then DoEvents
courant = Timer
If courant < Debut Then courant = courant + 24 * 3600
Loop While (Debut + Duree) > courant
End Sub
Messages postés
4
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
23 janvier 2006

c'est bien pour ça que Windows plante inévitablement (parce qu'il le fait avant) au bout de 24 jours !!
Messages postés
132
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
10 février 2012

Bonne remarque Nocturne :)
Messages postés
115
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
15 novembre 2007

Je reviens sur le commentaire DeAtHCrAsH déposé le 22/12/2002.
Une petite remarque.
Je m'explique, imagine que ton application tourne 24hrs/24.

La fonction Function GetTickCoun renvoi la durée écoulé (en milisecondes) depuis l'allumage du PC.

L'exemple que tu donnes est déclaré en Long donc pour une durée de 2147483647 (milisecondes) soit 24 jours 20 hrs 31 minutes et 23 secondes après il se produira un dépassement de capacité.

Contrairement a mon exemple, le Timer se reinitialise à 0 toutes les 24 hrs.

C'etais simplement une remarque, mais il faut le savoir.

Voili voilou..., A+
Messages postés
115
Date d'inscription
mardi 26 février 2002
Statut
Membre
Dernière intervention
15 novembre 2007

Bonne remarque zappy.
C'est vrai que l'on peut utiliser le composant timer parcontre je pense que cela prend un peut plus de ressources.
Merci et A+
Afficher les 8 commentaires

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.