FAIRE UNE PAUSE DANS UN PROGRAMME (PREND EN CHARGE LE PASSAGE DE MINUIT)
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013
-
22 déc. 2002 à 18:34
nonopirator
Messages postés6Date d'inscriptionlundi 14 février 2005StatutMembreDernière intervention29 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.
nonopirator
Messages postés6Date d'inscriptionlundi 14 février 2005StatutMembreDernière intervention29 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és4Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention23 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és130Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention10 février 2012 13 mai 2003 à 00:52
Bonne remarque Nocturne :)
cs_Nocturne
Messages postés115Date d'inscriptionmardi 26 février 2002StatutMembreDernière intervention15 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és115Date d'inscriptionmardi 26 février 2002StatutMembreDernière intervention15 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és161Date d'inscriptionmardi 19 juin 2001StatutMembreDernière intervention10 avril 20072 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és115Date d'inscriptionmardi 26 février 2002StatutMembreDernière intervention15 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és2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDerniè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..
1 mars 2005 à 13:38
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
12 mai 2004 à 09:13
13 mai 2003 à 00:52
26 déc. 2002 à 23:33
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+
23 déc. 2002 à 19:59
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+
23 déc. 2002 à 16:12
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+
22 déc. 2002 à 22:41
Tu as raison, je n'avais pas pensé à cette posibilité.
Merci pour ton exemple.
Bonne prog.
A+
22 déc. 2002 à 18:34
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