ScriptForge. Serviço Timer

O serviço Timer mede o tempo que demora a executar os scripts do utilizador.

Um Timer mede durações. Pode ser:

Ícone da dica

As durações são expressas em segundos, com uma precisão de 3 algarismos decimais (milissegundos). Um valor de duração de 12,345 corresponde a 12 segundos e 345 milissegundos


Chamada de serviço

Antes de utilizar o serviço Timer, é necessário carregar ou importar a biblioteca ScriptForge:

Ícone de nota

• As macros básicas requerem o carregamento da biblioteca ScriptForge através da seguinte instrução:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Os scripts Python requerem a importação do módulo scriptforge:
from scriptforge import CreateScriptService


Em Basic

O exemplo abaixo cria um objeto Timer denominado myTimer e inicia-o imediatamente.


    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim myTimer As Variant
    myTimer = CreateScriptService("Timer", True)
    «O temporizador começa a contar imediatamente quando o segundo argumento é = True; o valor por predefinição é False»
  

Recomenda-se libertar os recursos após a utilização:


    Set myTimer = myTimer.Dispose()
  
Em Python

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

Características

Nome

Apenas leitura

Tipo

Descrição

Duration

Sim

Double

O tempo de execução efetivo decorrido desde o início ou entre o início e o fim (não tem em conta o tempo em que o processo esteve suspenso)

IsStarted

Sim

Boolean

True quando o temporizador é iniciado ou suspenso

IsSuspended

Sim

Boolean

Verdadeiro quando o temporizador é iniciado e suspenso

SuspendDuration

Sim

Double

O tempo real decorrido durante a suspensão, desde o início ou entre o início e o fim

TotalDuration

Sim

Double

O tempo real decorrido desde o início ou entre o início e o fim (incluindo suspensões e tempo de funcionamento)


Ícone da dica

Note-se que a propriedade TotalDuration equivale à soma das propriedades Duration e SuspendDuration.


Métodos

Todos os métodos não requerem argumentos e devolvem um valor Boolean.

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

Nome

Descrição

Valor devolvido

Continue

Reinicia o Timer caso tenha sido suspenso

False se o temporizador não estiver suspenso

Restart

Encerra o Timer e descarta os valores atuais das suas propriedades, reiniciando-o como um novo Timer sem dados

False se o temporizador estiver inativo

Start

Inicia um novo temporizador vazio

False se o temporizador já estiver a funcionar

Suspend

Suspende um temporizador em funcionamento

False se o temporizador não tiver sido iniciado ou já estiver suspenso

Terminate

Interrompe um temporizador em funcionamento

False se o temporizador não estiver nem a funcionar nem suspenso


Exemplo:

Os exemplos abaixo, em Basic e Python, ilustram a utilização dos métodos e propriedades do serviço Timer.

Em Basic

    myTimer.Start()
    Wait 500
    myTimer.Suspend()
    «O tempo decorrido enquanto a caixa de diálogo estiver aberta será contabilizado como tempo de suspensão»
    MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
    myTimer.Continue()
    Wait 500
    «O tempo decorrido enquanto a caixa de diálogo estiver aberta será contabilizado como tempo de execução»
    MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
    myTimer.Terminate()
    «Apresenta os tempos finais registados»
    MsgBox myTimer.Duration & " " & myTimer.SuspendDuration & " " & myTimer.TotalDuration
  
Ícone de nota

Se chamar o método Terminate, as chamadas subsequentes ao método Continue não retomarão a medição do tempo. Da mesma forma, após um Timer ter sido encerrado, chamar o método Start irá reiniciá-lo como se fosse um novo Timer totalmente vazio.


Em 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))
  
Ícone de nota

Tenha em atenção que a função Wait em BASIC aceita um argumento de duração em milissegundos, enquanto a função sleep em Python utiliza segundos no seu argumento.


Trabalhar com vários temporizadores

É possível instanciar vários serviços Timer em paralelo, o que proporciona flexibilidade na medição do tempo em diferentes partes do código.

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

Em Basic

    Dim myTimerA as Variant, myTimerB as Variant
    myTimerA = CreateScriptService("Timer")
    myTimerB = CreateScriptService("Timer")
    'Inicia o myTimerA
    myTimerA.Start()
    Wait 1000 'Wait 1 second (1,000 milliseconds)
    MsgBox myTimerA.Duration & " " & myTimerB.Duration
    'Inicia o myTimerB
    myTimerB.Start()
    Wait 1000
    MsgBox myTimerA.Duration & " " & myTimerB.Duration
    'Encerrar ambos os temporizadores'
    myTimerA.Terminate()
    myTimerB.Terminate()
  
Em 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()
  
Ícone de aviso

Todas as rotinas ou identificadores do ScriptForge Basic que tenham o caractere de sublinhado «_» como prefixo estão reservados para uso interno. Não se destinam a ser utilizados em macros do Basic ou em scripts Python.


D'oh! You found a bug (text/sbasic/shared/03030303.xhp#Timer_H1 not found).

Necessitamos da sua ajuda!

Necessitamos da sua ajuda!