Timer ultra longue durée, sans raz à minuit

Description

Basé sur le Timer Windoz, qui a la mauvaise particularité de compter jusqu'à 86399 secondes puis se remettre à 0 à minuit, la petite application réalisée ici permet de conserver sa précision à 1ms près (rafraîchissement du timer VB) tout en étendant le temps de comptage à 1.7E+308 secondes ou kek'choz kom'ça... En outre, l'appli' renvoie la valeur Double en Public, afin que ce "super timer" bateau puisse être exploité.

Source / Exemple :


Dim consigneTimer As Double 'valeur de départ du Timer
Dim minuit As Boolean 'détection du passage à minuit
Dim minuitOK As Boolean 'validation du premier passage à minuit
Dim jours As Integer 'nombre de jours implémentés
'Activation et désactivation du supertimer
Private Sub depart_Click()
    If depart.Caption = "Go !" Then
        Timer1.Enabled = True
        depart.Caption = "Stop"
    Else
        Timer1.Enabled = False
        depart.Caption = "Go !"
    End If
End Sub
'initialisation des variables
Private Sub Form_Load()
    consigneTimer = Timer
    minuit = False
    minuitOK = False
    jours = 0
End Sub
'réinitialisation des variables
Private Sub raz_Click()
    consigneTimer = Timer
    minuit = False
    minuitOK = False
    jours = 0
    afficher.Caption = "0"
    afficherJours.Caption = "0"
    afficherTimer.Caption = CStr(Timer)
End Sub
'rafraîchissement de la fonction superTimer et de l'affichage
Private Sub Timer1_Timer()
    superTimer
    afficher.Caption = CStr(Round(superTimer, 2))
    afficherTimer.Caption = CStr(Timer)
    afficherJours.Caption = CStr(jours)
End Sub

'Calculs du supertimer en fonction de la valeur de consigne,
'du premier passage à minuit et du nombre de jours
Public Function superTimer() As Double

    'On détecte que l'on s'apprète à passer à minuit
    If Timer > 86398 Then minuit = True
    
    'On vient de passer minuit pour la première fois
    If (minuit = True) And (Timer < 1) And (jours = 0) And (minuitOK = False) Then
        'On observera la valeur opposée à celle de consigne désormais...
        consigneTimer = 86400 - consigneTimer
        'On se prépare déjà pour le prochain passage à minuit
        minuit = False
        'On garde "à l'esprit" que l'on a déjà passé minuit une première fois...
        minuitOK = True
    End If
    
    'On vient de passer minuit une seconde fois ou au-delà
    If (minuitOK = True) And (minuit = True) And (Timer < 1) Then
        'On incrémente le nombre de jours de fonctionnement du supertimer
        'ce nombre de jours est considéré sur les passages à minuit,
        'et non pas sur les passages du Timer à la valeur de consigne...
        jours = jours + 1
        'On se prépare pour le prochain passage à minuit
        minuit = False
    End If
    
    'On n'a pas encore passé minuit une seule fois...
    If minuitOK = False Then
        'On considère alors l'écart entre le Timer et la valeur de consigne...
        superTimer = Timer - consigneTimer
    'On a déjà passé minuit une ou plusieurs fois...
    Else
        'On considère la consigne recalculée + le timer
        ' + le nombre de secondes par jours déjà passés
        superTimer = consigneTimer + Timer + (86400 * jours)
    End If
    
End Function

Codes Sources

A voir également

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.