Contenuto
Indice 🔎︎

# Servizio ScriptForge.Timer

Il servizio Timer misura il tempo impiegato per eseguire gli script dell'utente.

Un Timer misura le durate. Può essere:

- Avviato, per indicare quando iniziare la misurazione del tempo.

- Sospeso, per mettere in pausa la misurazione del tempo di esecuzione.

- Riavviato, per continuare a tracciare il tempo di esecuzione dopo che il Timer è stato sospeso.

- Ripristinato, per cancellare le misurazioni precedenti e far ripartire il Timer da zero.

Le durate sono espresse in secondi con una precisione di tre 3 cifre decimali (millisecondi). Una durata di valore 12.345 indica 12 secondi e 345 millisecondi

## Invocare il servizio

Prima di usare il servizio Timer è necessario caricare o importare le librerie ScriptForge:

• Le macro in Basic richiedono il caricamento della libreria ScriptForge usando la seguente istruzione:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Gli script in Python richiedono un'importazione dal modulo scriptforge:
from scriptforge import CreateScriptService

##### In Basic

L'esempio sottostante crea un oggetto Timer denominato myTimer e lo fa partire immediatamente.

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        Dim myTimer As Variant
        myTimer = CreateScriptService("Timer", True)
        'Il contatore parte immediatamente se il secondo argomento = True, predefinito = False

Si raccomanda di liberare le risorse dopo l'uso:

        Set myTimer = myTimer.Dispose()

##### In Python

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

## Proprietà

Nome | Sola lettura | Tipo | Descrizione
--- | --- | --- | ---
Duration | Sì | Double | Il tempo di esecuzione attuale trascorso dall'avvio o tra l'avvio e l'arresto (senza considerare il tempo delle sospensioni)
IsStarted | Sì | Boolean | True quando il timer è avviato o sospeso
IsSuspended | Sì | Boolean | True quando il timer è avviato e sospeso
SuspendDuration | Sì | Double | Il tempo effettivamente trascorso in fase di sospensione dall'avvio o tra l'avvio e l'arresto
TotalDuration | Sì | Double | Il tempo effettivamente trascorso dall'avvio o tra l'avvio e l'arresto (comprese le sospensioni e il tempo di esecuzione)

Fare attenzione che la proprietà TotalDuration equivale alla somma delle proprietà Duration e SuspendDuration.

## Metodi

Tutti i metodi non richiedono argomento e restituiscono un valore di tipo Boolean.

Se il valore restituito è False, allora non è accaduto nulla.

Nome | Descrizione | Valore restituito
--- | --- | ---
Continue | Riprende il Timer se era stato sospeso | False se il timer non è sospeso
Restart | Termina il Timer ed elimina i valori correnti delle sue proprietà, riavviando un nuovo Timer pulito | False se il timer è inattivo
Start | Avvia un nuovo timer pulito | False se il timer è già avviato
Suspend | Sospende un timer in esecuzione | False se il timer non è avviato o è già sospeso
Terminate | Arresta un timer in esecuzione | False se il timer non è nè avviato nè sospeso

### Esempio:

Gli esempi seguenti in Basic e Python illustrano l'uso dei metodi e delle proprietà del servizio Timer.

##### In Basic

        myTimer.Start()
        Wait 500
        myTimer.Suspend()
        'Il tempo trascorso mentre il riquadro di dialogo è aperto viene conteggiato come tempo di sospensione
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
        myTimer.Continue()
        Wait 500
        'Il tempo trascorso mentre il riquadro di dialogo è aperto viene conteggiato come tempo di esecuzione
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
        myTimer.Terminate()
        'Mostra il conteggio del tempo finale
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration

Se chiamate il metodo Terminate, le successive chiamate al metodo Continue non faranno riprendere il conteggio del tempo. In modo simile, dopo che un Timer è stato terminato, le chiamate al metodo Start lo riavvieranno come se si trattasse di un nuovo Timer pulito.

##### In 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))

Fate attenzione che la funzione Wait in Basic richiede l'argomento per la durata espresso in millisecondi, mentre la funzione sleep in Python usa i secondi per il suo argomento.

## Lavorare con Timer multipli

È possibile istanziare più servizi Timer in parallelo, che forniscono flessibilità nella misurazione del tempo in differenti parti del codice.

L'esempio seguente illustra come creare e avviare separatamente due oggetti Timer.

##### In Basic

        Dim myTimerA as Variant, myTimerB as Variant
        myTimerA = CreateScriptService("Timer")
        myTimerB = CreateScriptService("Timer")
        'Avvia myTimerA
        myTimerA.Start()
        Wait 1000 'Wait 1 second (1,000 milliseconds)
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        'Avvia myTimerB
        myTimerB.Start()
        Wait 1000
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        'Termina entrambi i timer
        myTimerA.Terminate()
        myTimerB.Terminate()

##### In 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()

Tutte le routine e gli identificatori Basic di ScriptForge che iniziano con un carattere di sottolineatura "_" sono riservati per uso interno. Non è previsto il loro utilizzo nelle macro in Basic o negli script in Python.

Argomenti correlati

Funzione Now

Funzione Timer