Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

execution a une heure fixe!!

5 réponses
Avatar
michael
Bonjour, j'essaie d'executer un programme au même moment ( à la même heures),
mais avec le système ici il y a une dérive dans le temps petit a petit, et je
dois vraiment pouvoir le faire tourner à une heure fixe, ex: 12h12 13h12
14h12 etc...
voici le code: (le tout dans un timer qui toune toute les trentes secondes)
a noter que le calcul en question des donnée dure un petit temps...

Private Sub Timer1_Timer()
Const lngIntervalMinute As Long = 60
Static blnExecutionEnCours As Boolean
Static datDerniereExecution As Date
Static blnNotificationEnCours As Boolean


'On Error GoTo Erreur
If blnExecutionEnCours Then Exit Sub
' On fait une vérification toutes les 60 minutes

If DateDiff("n", datDerniereExecution, Now) >= lngIntervalMinute Then
blnExecutionEnCours = True
' Je fais mon traitement
.......
Form1.Label2.Caption = Now
datDerniereExecution = Now
blnExecutionEnCours = False

End If
Exit Sub

Mais peux etre existe t'il une autre methode que par timer ou un autre
astuce piur y arriver... Je ne veux evidemment pas passer par le scheduler..

merci d'avance

5 réponses

Avatar
mbfac
Bonjour

Je pense que c'est à cause des secondes sur la variable 'data de la derniere
execution' il faudrai la ramener à la minute:00
tronquer les secondes
et peut etre aussi mettre now dans un variable pour le test et la
mémorisation de l'heure de la derniere execution
un truc du genre...

a=now
If DateDiff("n", datDerniereExecution, a) >= lngIntervalMinute Then

datDerniereExecution = int(a*24*60)/24/60

blnExecutionEnCours = True
' Je fais mon traitement



Cordialement

Michel BERTRAND


"michael" a écrit dans le message de
news:
Bonjour, j'essaie d'executer un programme au même moment ( à la même
heures),
mais avec le système ici il y a une dérive dans le temps petit a petit, et
je
dois vraiment pouvoir le faire tourner à une heure fixe, ex: 12h12 13h12
14h12 etc...
voici le code: (le tout dans un timer qui toune toute les trentes
secondes)
a noter que le calcul en question des donnée dure un petit temps...

Private Sub Timer1_Timer()
Const lngIntervalMinute As Long = 60
Static blnExecutionEnCours As Boolean
Static datDerniereExecution As Date
Static blnNotificationEnCours As Boolean


'On Error GoTo Erreur
If blnExecutionEnCours Then Exit Sub
' On fait une vérification toutes les 60 minutes

If DateDiff("n", datDerniereExecution, Now) >= lngIntervalMinute Then
blnExecutionEnCours = True
' Je fais mon traitement
.......
Form1.Label2.Caption = Now
datDerniereExecution = Now
blnExecutionEnCours = False

End If
Exit Sub

Mais peux etre existe t'il une autre methode que par timer ou un autre
astuce piur y arriver... Je ne veux evidemment pas passer par le
scheduler..

merci d'avance



Avatar
Fred
michael a écrit :
Bonjour, j'essaie d'executer un programme au même moment ( à la même heures),
mais avec le système ici il y a une dérive dans le temps petit a petit, et je
dois vraiment pouvoir le faire tourner à une heure fixe, ex: 12h12 13h12
14h12 etc...
voici le code: (le tout dans un timer qui toune toute les trentes secondes)
a noter que le calcul en question des donnée dure un petit temps...



Bonjour,
Déjà, si tu note la date de dernière exécution *avant* le traitement, tu
auras moins de dérive.
Mais le mieux serait de comparer Now avec les heures d'exécution prévues
(ne pas procéder par cumul)
Avatar
michael
merci je vais creuser dans cette direction

"Fred" a écrit :

michael a écrit :
> Bonjour, j'essaie d'executer un programme au même moment ( à la même heures),
> mais avec le système ici il y a une dérive dans le temps petit a petit, et je
> dois vraiment pouvoir le faire tourner à une heure fixe, ex: 12h12 13h12
> 14h12 etc...
> voici le code: (le tout dans un timer qui toune toute les trentes secondes)
> a noter que le calcul en question des donnée dure un petit temps...

Bonjour,
Déjà, si tu note la date de dernière exécution *avant* le traitement, tu
auras moins de dérive.
Mais le mieux serait de comparer Now avec les heures d'exécution prévues
(ne pas procéder par cumul)



Avatar
X
Bonjour, tu as une autre solution en langage système, mon bon ce
n'est pas du VB, c'est l'API:

Private Declare Function GetTickCount Lib "Kernel32" () As Long
variable_milisecondes_depuis_le_lancement_long = GetTickCount()

1 journée fait environ 86 millions (86.400.000 // 100e de secondes)
Un long fait environ 2,15 milliards, ce qui fait 25 jours

Tu sais manier tout ça; a priori ça donera un truc du genre

Sub tempus()
Dim heure_h as long
heure_h = GetTickCount()
heure_h = heure_h + 84400000
call exécution
Do While heure_h <> GetTickCount() ' voir si ça marche ainsi...
DoEvents
Loop
call tempus
End Sub

'.......le tout dans une form invisible Sub Main() ' NON TESTE

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"michael" a écrit dans le message de
news:
Bonjour, j'essaie d'executer un programme au même moment ( à la même
heures),
mais avec le système ici il y a une dérive dans le temps petit a petit, et
je
dois vraiment pouvoir le faire tourner à une heure fixe, ex: 12h12 13h12
14h12 etc...
voici le code: (le tout dans un timer qui toune toute les trentes
secondes)
a noter que le calcul en question des donnée dure un petit temps...

Private Sub Timer1_Timer()
Const lngIntervalMinute As Long = 60
Static blnExecutionEnCours As Boolean
Static datDerniereExecution As Date
Static blnNotificationEnCours As Boolean


'On Error GoTo Erreur
If blnExecutionEnCours Then Exit Sub
' On fait une vérification toutes les 60 minutes

If DateDiff("n", datDerniereExecution, Now) >= lngIntervalMinute Then
blnExecutionEnCours = True
' Je fais mon traitement
.......
Form1.Label2.Caption = Now
datDerniereExecution = Now
blnExecutionEnCours = False

End If
Exit Sub

Mais peux etre existe t'il une autre methode que par timer ou un autre
astuce piur y arriver... Je ne veux evidemment pas passer par le
scheduler..

merci d'avance



Avatar
François Ranwez
Tu peux utiliser les tâches planifiées de Windows ?!


"michael" a écrit dans le message de
news:
Bonjour, j'essaie d'executer un programme au même moment ( à la même
heures),
mais avec le système ici il y a une dérive dans le temps petit a petit, et
je
dois vraiment pouvoir le faire tourner à une heure fixe, ex: 12h12 13h12
14h12 etc...
voici le code: (le tout dans un timer qui toune toute les trentes
secondes)
a noter que le calcul en question des donnée dure un petit temps...

Private Sub Timer1_Timer()
Const lngIntervalMinute As Long = 60
Static blnExecutionEnCours As Boolean
Static datDerniereExecution As Date
Static blnNotificationEnCours As Boolean


'On Error GoTo Erreur
If blnExecutionEnCours Then Exit Sub
' On fait une vérification toutes les 60 minutes

If DateDiff("n", datDerniereExecution, Now) >= lngIntervalMinute Then
blnExecutionEnCours = True
' Je fais mon traitement
.......
Form1.Label2.Caption = Now
datDerniereExecution = Now
blnExecutionEnCours = False

End If
Exit Sub

Mais peux etre existe t'il une autre methode que par timer ou un autre
astuce piur y arriver... Je ne veux evidemment pas passer par le
scheduler..

merci d'avance