Conteúdo
Índice 🔎︎

# Serviço ScriptForge.Timer

O serviço Timer mede o tempo para executar scripts de usuário.

Um Timer mede durações. Ele pode ser:

- Iniciado, para indicar quando a medição do tempo teve início.

- Suspenso, para pausar a medição do tempo de execução.

- Retomado, para continuar a medição do tempo de execução após a suspensão do Timer.

- Reiniciado, o que cancelará medições anteriores e inicializará o Timer em zero.

Durações são expressas em segundos com uma precisão de 3 casas decimais (milissegundos). Um valor de duração igual a 12.345 significa 12 segundos e 345 milissegundos.

## Invocação do serviço

Antes de usar o serviço Timer a biblioteca ScriptForge precisa ser carregada usando:

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")

O exemplo abaixo cria um objeto Timer com o nome myTimer e o inicia imediatamente.

        Dim myTimer As Variant
        myTimer = CreateScriptService("Timer", True)
        'The timer starts immediately when the second argument = True, default = False

É recomendado liberar recursos após o uso:

        Set myTimer = myTimer.Dispose()

Este serviço é totalmente compatível com as linguagens Basic e Python. Todos os exemplos são descritos usando a linguagem de programação Basic e podem ser facilmente convertidos para Python.

## Propriedades

Nome | Somente leitura | Tipo | Descrição
Duration | Sim | Double | Tempo atual de execução que se passou desde o início ou entre o início e a pausa (não considera os tempos em suspensão)
IsStarted | Sim | Boolean | True quanto o Timer estiver iniciado ou suspenso
IsSuspended | Sim | Boolean | True quanto o Timer estiver iniciado e suspenso
SuspendDuration | Sim | Double | Tempo que se passou com o Timer em suspensão desde o início ou entre o início e pausa.
TotalDuration | Sim | Double | Tempo que se passou desde o início ou entre início e pausa (incluindo tempo em suspensão e em execução)

Note that the TotalDuration property is equivalent to summing the Duration and SuspendDuration properties.

## Métodos

Nenhum dos métodos deste serviço requerem argumentos e retorna um valor Boolean.

Se o valor retornado for False, então nada aconteceu.

Nome | Descrição | Valor de retorno
Continue | Retoma o Timer se este estiver suspenso. | False se o Timer não estiver suspenso
Restart | Encerra o Timer e descarta os valores de sua propriedade, reiniciando com um novo Timer zerado. | False se o Timer estiver inativo
Start | Inicia um novo Timer | False se o Timer já tiver iniciado
Suspend | Suspende o Timer em execução | False se o Timer não tiver iniciado ou se estiver suspenso
Terminate | Para o Timer em execução | False se o Timer não tiver iniciado nem suspenso.

### Exemplo:

          myTimer.Start()
          Wait 500
          myTimer.Suspend()
          'O tempo que se passou enquanto a caixa de diálogo esteve aberta será contado como tempo em suspensão
          MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
          myTimer.Continue()
          Wait 500
          'O tempo que se passou enquanto a caixa de diálogo esteve aberta será contado como tempo em execução
          MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
          myTimer.Terminate()
          'Mostra as medições de tempo finais
          MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration

Se você chamar o método Terminate, chamadas subsequentes do método Continue não retomarão a medição de tempo. De forma similar, após um Timer ser concluído, chamar o método Start irá reiniciá-lo como se fosse um novo Timer.

## Trabalhando com Timers Múltiplos

É possível instanciar múltiplas instâncias do serviço Timer em paralelo, o que dá flexibilidade na medição de tempo em diferentes partes do código.

O exemplo a seguir ilustra como criar dois objetos Timer e iniciá-los separadamente.

        Dim myTimerA as Variant, myTimerB as Variant
        myTimerA = CreateScriptService("Timer")
        myTimerB = CreateScriptService("Timer")
        'Inicia myTimerA
        myTimerA.Start()
        Wait 1000 'Wait 1 second (1,000 milliseconds)
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        'Inicia myTimerB
        myTimerB.Start()
        Wait 1000
        MsgBox myTimerA.Duration & " " & myTimerB.Duration
        'Conclui ambos os Timers
        myTimerA.Terminate()
        myTimerB.Terminate()

Todas as rotinas básicas ou identificadores do ScriptForge que possuem o caractere "_" como prefixo são reservados apenas para uso interno. Elas não devem ser usadas em macros Basic.

Tópicos relacionados

Função Now

Função Timer