Spis treści
Indeks 🔎︎

# Usługa ScriptForge.Timer

Usługa Timer mierzy ilość czasu potrzebnego na uruchomienie skryptów użytkownika.

Timer mierzy czas trwania. To może być:

- Rozpoczęcie, aby wskazać, kiedy rozpocząć pomiar czasu.

- Wstrzymanie, aby wstrzymać odmierzanie czasu pracy.

- Wznowienie, aby kontynuować śledzenie czasu działania po zawieszeniu usługi Timer.

- Ponowne uruchomienie, co spowoduje anulowanie poprzednich pomiarów i rozpoczęcie odliczania usługi Timer od zera.

Czasy trwania wyrażane są w sekundach z dokładnością do 3 cyfr dziesiętnych (milisekund). Wartość czasu trwania wynosząca 12,345 oznacza 12 sekund i 345 milisekund

## Wywoływanie usługi

Przed użyciem usługi Timer należy załadować lub zaimportować bibliotekę ScriptForge:

• Podstawowe makra wymagają załadowania biblioteki ScriptForge przy użyciu następującej instrukcji:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Skrypty Pythona wymagają importu z modułu scriptforge:
from scriptforge import CreateScriptService

##### W języku Basic

Poniższy przykład tworzy obiekt Timer o nazwie myTimer i natychmiast go uruchamia.

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        Dim myTimer As Variant
        myTimer = CreateScriptService("Timer", True)
        ' Jeśli drugi argument ma wartość True (domyślnie jest to False), pomiar rozpocznie się natychmiast

Zaleca się zwolnienie zasobów po użyciu:

        Set myTimer = myTimer.Dispose()

##### W języku Python

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

## Właściwości

Nazwa | Tylko do odczytu | Typ | Opis
--- | --- | --- | ---
Duration | Tak | Double | Rzeczywisty czas pracy, jaki upłynął od rozpoczęcia lub pomiędzy rozpoczęciem a zatrzymaniem (nie uwzględnia czasu zawieszenia)
IsStarted | Tak | Boolean | True, kiedy licznik jest uruchamiany lub wstrzymywany
IsSuspended | Tak | Boolean | True, kiedy licznik jest uruchamiany i wstrzymywany
SuspendDuration | Tak | Double | Rzeczywisty czas, jaki upłynął w trybie wstrzymania od uruchomienia lub pomiędzy rozpoczęciem a zatrzymaniem
TotalDuration | Tak | Double | Rzeczywisty czas, jaki upłynął od rozpoczęcia lub pomiędzy rozpoczęciem a zatrzymaniem (w tym wstrzymania i czas pracy)

Należy pamiętać, że właściwość TotalDuration jest równoważna zsumowaniu właściwości Duration i SuspendDuration.

## Metody

Wszystkie metody nie wymagają argumentów i zwracają wartość Boolean.

Jeśli zwrócona wartość to False, oznacza to, że nic się nie stało.

Nazwa | Opis | Zwrócona wartość
--- | --- | ---
Continue | Wznawia działanie Timer, jeśli zostało zawieszone | False, jeśli licznik nie jest wstrzymany
Restart | Zatrzymuje Timer, odrzuca bieżące wartości właściwości i uruchamia ponownie jako nowy Timer | False, jeśli licznik jest nieaktywny
Start | Rozpoczyna nowy, czysty pomiar | False, jeśli licznik już rozpoczęto
Suspend | Wstrzymuje działający licznik | False, jeśli licznik nie został uruchomiony lub został już wstrzymany
Terminate | Zatrzymuje działający licznik | False, jeśli licznik nie został uruchomiony ani wstrzymany

### Przykład:

Poniższe przykłady w języku Basic i Python ilustrują użycie metod i właściwości usługi Timer.

##### W języku Basic

        myTimer.Start()
        Wait 500
        myTimer.Suspend()
        ' Czas, który upłynął, gdy okno dialogowe jest otwarte, będzie liczony jako czas wstrzymania
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
        myTimer.Continue()
        Wait 500
        ' Czas, który upłynął, gdy okno dialogowe jest otwarte, będzie liczony jako czas działania
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
        myTimer.Terminate()
        ' Pokazuje końcowe pomiary czasu
        MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration

Jeśli wywołasz metodę Terminate, kolejne wywołania metody Continue nie wznowią pomiaru czasu. Podobnie, po zakończeniu licznika, wywołanie metody Start zrestartuje go tak, jakby był to nowy, czysty pomiar.

##### W języku 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))

Należy pamiętać, że funkcja Wait w języku BASIC przyjmuje argument czasu trwania w milisekundach, podczas gdy funkcja sleep w Pythonie używa w swoim argumencie sekund.

## Praca z wieloma licznikami

Możliwe jest równoległe utworzenie wielu usług Timer, co zapewnia elastyczność pomiaru czasu w różnych częściach kodu.

Poniższy przykład ilustruje, jak utworzyć dwa obiekty Timer i uruchomić je oddzielnie.

##### W języku Basic

        Dim myTimerA as Variant, myTimerB as Variant
        myTimerA = CreateScriptService("Timer")
        myTimerB = CreateScriptService("Timer")
        ' Uruchamia myTimerA
        myTimerA.Start()
        Wait 1000 'Wait 1 second (1,000 milliseconds)
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        ' Uruchamia myTimerB
        myTimerB.Start()
        Wait 1000
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        ' Zakończ oba liczniki
        myTimerA.Terminate()
        myTimerB.Terminate()

##### W języku 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()

Wszystkie podstawowe procedury lub identyfikatory ScriptForge poprzedzone znakiem podkreślenia „_” są zarezerwowane do użytku wewnętrznego. Nie należy ich używać w makrach Basic ani skryptach Pythona.

Tematy pokrewne

Funkcja Now

Funkcja Timer