Ajuda do LibreOffice 25.2
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.
Antes de usar o serviço Timer a biblioteca ScriptForge precisa ser carregada ou importada:
O exemplo abaixo cria um objeto Timer com o nome myTimer e o inicia imediatamente.
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim myTimer As Variant
    myTimer = CreateScriptService("Timer", True)
    ' O timer se inicia imediatamente quando o segundo argumento for igual a True (padrão = False)
  É recomendado liberar recursos após o uso:
    Set myTimer = myTimer.Dispose()
  
    from scriptforge import CreateScriptService
    myTimer = CreateScriptService("Timer", start = True)
    # ...
    myTimer = myTimer.Dispose()
  | 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 que a propriedade TotalDuration é equivalente a somar os valores das propriedades Duration e SuspendDuration.
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. | 
Os exemplos abaixo em Basic e Python ilustram o uso dos métodos e propriedades do serviço Timer.
    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.
    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))
  Note que o argumento de duração da função Wait em Basic é expresso em milissegundos, ao passo que a função sleep em Python deve ser expressa em segundos.
É 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()
  
    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()