Contenu

# Service ScriptForge.Timer

Le service Timer mesure le temps nécessaire à l'exécution des scripts utilisateur.

Un Timer mesure les durées. Ça peut être:

- Démarré, pour indiquer quand commencer à mesurer le temps.

- Suspendu, pour suspendre la mesure du temps de fonctionnement.

- Reprise, pour continuer à suivre le temps d'exécution après la suspension du minuteur.

- Redémarré, ce qui annulera les mesures précédentes et démarrera le Timer à zéro.

Les durées sont exprimées en secondes avec une précision de 3 chiffres décimaux (millisecondes). Une valeur de durée de 12,345 signifie 12 secondes et 345 millisecondes

## Invocation du service

Avant d'utiliser le service Timer, la bibliothèque ScriptForge doit être chargée ou importée :

• Les macros Basic nécessitent de charger la bibliothèque ScriptForge à l'aide de l'instruction suivante :
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Les scripts Python nécessitent un import depuis le module scriptforge :
from scriptforge import CreateScriptService

##### En Basic :

L'exemple ci-dessous crée un objet Timer nommé myTimer et le démarre immédiatement.

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        Dim myTimer As Variant
        myTimer = CreateScriptService("Timer", True)
        'Le minuteur démarre immédiatement lorsque le deuxième argument = True, par défaut = False

Il est recommandé de libérer des ressources après utilisation :

        Set myTimer = myTimer.Dispose()

##### En Python

        from scriptforge import CreateScriptService
        myTimer = CreateScriptService("Timer", start = True)
        # ...
        myTimer = myTimer.Dispose()

## Propriétés

Nom | Lecture seule | Type | Description
--- | --- | --- | ---
Duration | Oui | Double | Le temps de fonctionnement réel écoulé depuis le démarrage ou entre le démarrage et l'arrêt (ne prend pas en compte le temps suspendu)
IsStarted | Oui | Boolean | True lorsque le minuteur est démarré ou suspendu
IsSuspended | Oui | Boolean | True lorsque le minuteur est démarré et suspendu
SuspendDuration | Oui | Double | Le temps réel écoulé pendant la suspension depuis le démarrage ou entre le démarrage et l'arrêt
TotalDuration | Oui | Double | Le temps réel écoulé depuis le démarrage ou entre le démarrage et l'arrêt (y compris les suspensions et le temps de fonctionnement)

Notez que la propriété TotalDuration équivaut à la somme des propriétés Duration et SuspendDuration.

## Méthodes

Toutes les méthodes ne nécessitent pas d'arguments et renvoient une valeur Boolean.

Si la valeur renvoyée est False, alors rien ne s'est produit.

Nom | Description | Valeur renvoyée
--- | --- | ---
Continue | Reprend le Timer s'il a été suspendu | False si le timer n'est pas suspendu
Restart | Termine le Timer et supprime ses valeurs de propriété actuelles, redémarrant en tant que nouveau Timer propre. | False si l'horloge n'est pas active
Start | Démarre une nouvelle horloge | False si l'horloge est déjà démarrée
Suspend | Suspend une horloge en cours d'exécution | False si l'horloge n'est pas démarrée ou déjà suspendue
Terminate | Arrête une horloge en cours d'exécution | False si l'horloge n'est ni démarrée ni suspendue

### Exemple :

Les exemples ci-dessous en Basic et Python illustrent l'utilisation des méthodes et propriétés du service Timer.

##### En Basic :

        myTimer.Start()
        Wait 500
        myTimer.Suspend()
        'Le temps écoulé pendant que la boîte de dialogue est ouverte sera compté comme temps suspendu
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
        myTimer.Continue()
        Wait 500
        'Le temps écoulé pendant que la boîte de dialogue est ouverte sera compté comme temps d'exécution
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
        myTimer.Terminate()
        'Affiche les mesures de temps finales
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration

Si vous appelez la méthode Terminate, les appels suivants pour la méthode Continue ne reprendront pas la mesure du temps. De même, après la fin d'un Timer, l'appel de la méthode Start le redémarrera comme s'il s'agissait d'un nouveau Timer.

##### En Python

        from time import sleep
        bas = CreateScriptService("Basic")
        myTimer.Start()
        sleep(0.5)
        myTimer.Suspend()
        bas.MsgBox("{} {} {}".format(myTimer.Duration, myTimer.SuspendDuration, myTimer.TotalDuration))
        myTimer.Continue()
        sleep(0.5)
        bas.MsgBox("{} {} {}".format(myTimer.Duration, myTimer.SuspendDuration, myTimer.TotalDuration))
        myTimer.Terminate()
        bas.MsgBox("{} {} {}".format(myTimer.Duration, myTimer.SuspendDuration, myTimer.TotalDuration))

Sachez que la fonction Wait en BASIC prend un argument de durée en millisecondes alors que la fonction sleep en Python utilise des secondes dans son argument.

## Travailler avec plusieurs horloges

Il est possible d'instancier plusieurs services Timer en parallèle, ce qui donne de la flexibilité dans la mesure du temps dans différentes parties du code.

L'exemple suivant illustre comment créer deux objets Timer et les démarrer séparément.

##### En Basic :

        Dim myTimerA as Variant, myTimerB as Variant
        myTimerA = CreateScriptService("Timer")
        myTimerB = CreateScriptService("Timer")
        'Starts myTimerA
        myTimerA.Start()
        Wait 1000 'Wait 1 second (1,000 milliseconds)
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        'Starts myTimerB
        myTimerB.Start()
        Wait 1000
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        'Terminer les deux horloges
        myTimerA.Terminate()
        myTimerB.Terminate()

##### En Python

        from time import sleep
        myTimerA = CreateScriptService("Timer")
        myTimerB = CreateScriptService("Timer")
        myTimerA.Start()
        sleep(1)
        bas.MsgBox("{} {}".format(myTimerA.Duration, myTimerB.Duration))
        myTimerB.Start()
        sleep(1)
        bas.MsgBox("{} {}".format(myTimerA.Duration, myTimerB.Duration))
        myTimerA.Terminate()
        myTimerB.Terminate()

Toutes les routines ou identifiants de base ScriptForge qui sont préfixés par un caractère de soulignement "_" sont réservés à un usage interne. Ils ne sont pas destinés à être utilisés dans des macros de base ou des scripts Python.

Rubriques connexes

Fonction Now

Fonction Timer