FAIRE UNE PAUSE DANS UN PROGRAMME (PREND EN CHARGE LE PASSAGE DE MINUIT)

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 22 déc. 2002 à 18:34
nonopirator Messages postés 6 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 29 juin 2010 - 1 mars 2005 à 13:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5416-faire-une-pause-dans-un-programme-prend-en-charge-le-passage-de-minuit

nonopirator Messages postés 6 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 29 juin 2010
1 mars 2005 à 13:38
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
rdx83 Messages postés 4 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 23 janvier 2006
12 mai 2004 à 09:13
c'est bien pour ça que Windows plante inévitablement (parce qu'il le fait avant) au bout de 24 jours !!
rclsilver02 Messages postés 130 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 10 février 2012
13 mai 2003 à 00:52
Bonne remarque Nocturne :)
cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007
26 déc. 2002 à 23:33
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+
cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007
23 déc. 2002 à 19:59
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+
cs_zappy Messages postés 161 Date d'inscription mardi 19 juin 2001 Statut Membre Dernière intervention 10 avril 2007 2
23 déc. 2002 à 16:12
Sinon un autre solution plus simple serait d'utiliser un timer comme ceci

public sub myTimer_proc()
mytimer.enable = false
end sub

et dans le code
myTimer.enable = true
while myTimer.enable
dovents
wend

Je m'en sert pour mes timeouts de connexion avec winsock. a+
cs_Nocturne Messages postés 115 Date d'inscription mardi 26 février 2002 Statut Membre Dernière intervention 15 novembre 2007
22 déc. 2002 à 22:41
Salut DeAtHCrAsH,
Tu as raison, je n'avais pas pensé à cette posibilité.
Merci pour ton exemple.
Bonne prog.
A+
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
22 déc. 2002 à 18:34
Salut...
Voici quelques remarques :

1) L'API sleep n'est pas une réelle pose puisque qu'elle bloque l'execution du programme.

2) Pour faire une pose tu peux faire plus simplement.. Regarde .. Et pas besoin de module ....

tu declares en générale cet API :
Private Declare Function GetTickCount Lib "kernel32" () As Long


Et ensuite tu mets cette procedure dans ton form :

Public Sub Attente(ByVal MilsecToWait As Long)
Dim lngEndingTime As Long

lngEndingTime = GetTickCount() + (MilsecToWait)
Do While GetTickCount() < lngEndingTime
DoEvents
Loop
End Sub


Puis pour mettre une pose, tu n'as cas appeller la procédure comme suit :
Attente 2000 ' le temps est en milliseconde..

Voili voilou...

Bonne programmation et A++

DeAtH_-_CrAsH
Rejoignez-nous