Usos del servicio Timer
Aclarar en primer lugar que ahora no estamos hablando de la función Timer(), sino del uso de un servicio o clase definida en el código que sustenta LibreOffice. Se trata, en realidad, de una clase, por lo que contiene procedimientos y métodos, que explicaremos en esta entrada (1). Por este motivo, esta entrada presenta mayor complejidad que otras creadas con un objetivo explicativo similar.
Acceder al conjunto de propiedades y métodos de que consta este servicio, requiere importar previamente esa librería, procedimiento que se resuelve mediante GlobalScope.BasicLibraries.LoadLibrary("ScriptForge"), como tendremos ocasión de comprobar en los script de ejemplo con los que trabajaremos en esta entrada.
Sub TimerServicio1GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")Dim myTimer As VariantDim Tmp As Double'El cronómetro comienza inmediatamente cuando el segundo argumento = Verdadero, siendo el valor predeterminado = FalsomyTimer = CreateScriptService("Timer", True)Wait 1000Tmp = myTimer.DurationMsgBox Tmp'Es recomendable liberar recursos después del uso de Timer, cerrándolo.Set myTimer = myTimer.Dispose()End Sub
En este script accedemos al servicio (GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")) asignándolo a la variable myTimer (de tipo Variant) y visualizamos el transcurso del tiempo mediante la variable Tmp (tipo Double), a la que asignamos el contenido de la variable myTimer, sobre la que aplicamos la propiedad Duration (4).
La función del servicio Timer es medir el intervalo de tiempo necesario para ejecutar la secuencia de órdenes dadas por el usuario, esto es: funcionar como temporizador.
Como clase cuenta con las siguientes propiedades, todas ellas de sólo lectura...
- Duration (Duración). Asignar a variable Double. Contabiliza el tiempo real de ejecución transcurrido desde el inicio o entre inicio y parada, aunque no considera tiempo suspendido.
- IsStarted (Está iniciado). Asignar a variable Boolean. Devuelve True cuando se inicia o cuando se suspende el cronómetro.
- IsSuspended (Está suspendido). Asignar a variable Boolean. Devuelve True cuando se inicia y suspende el cronómetro.
- SuspendDuration (Suspender la duración). Asignar a variable Double. Indica el tiempo real transcurrido mientras está suspendido desde el inicio o entre el inicio y la parada.
- TotalDuration (Duración total). Asignar a variable Double). Indica el tiempo real transcurrido desde el inicio o entre el inicio y la parada (incluidas las suspensiones y el tiempo de ejecución). TotalDuration equivale a sumar las propiedades Duration y SuspendDuration.
... y con los siguientes métodos (funciones), que no requieren parámetros y devuelven un valor booleano.
- Continue() (Continuar) Reanuda el Timer si ha sido suspendido. Devuelve False si el cronómetro no está suspendido.
- Restart() (Reanudar) Finaliza el temporizador y descarta sus valores de propiedad actuales, reiniciándose como un nuevo temporizador limpio. Devuelve False si el temporizador está inactivo.
- Start() (Iniciar, comenzar) Inicia un temporizador nuevo. Devuelve False si el cronómetro ya está iniciado.
- Suspend() (Suspender) Suspende un temporizador en ejecución Devuelve False si el cronómetro no está iniciado o ya está suspendido.
- Terminate() (Terminar, finalizar) Detiene un temporizador en ejecución. Devuelve False si el cronómetro no se inicia ni se suspende.
Si llama al método Terminate(), las llamadas posteriores al método Continue() no reanudarán la medición del tiempo. De manera similar, después de que se haya terminado un temporizador, llamar al método Start() lo reinicia como si fuera un temporizador nuevo y limpio.
Veamos un script de ejemplo de cómo usar propiedades y métodos del servicio Timer. Las explicaciones se incluyen en el código como comentarios (en negro):
Sub TimerServicio2GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")Dim myTimer As VariantmyTimer = CreateScriptService("Timer", True)myTimer.Start() 'Inicia el temporizadorWait 500myTimer.Suspend() 'Suspende el temporizador'Uso de las propiedades Duration, SuspendDuration y TotalDuration en MsgBox'El tiempo transcurrido mientras el cuadro de diálogo esté abierto se contará como tiempo suspendidoMsgBox "Duración: " & myTimer.Duration & Chr(13) & "Tiempo de suspensión: " & myTimer.SuspendDuration & Chr(13) & "Duración total: " & myTimer.TotalDurationmyTimer.Continue() 'Reanuda el temporizadorWait 500'Uso de las propiedades Duration, SuspendDuration y TotalDuration en MsgBox.'El tiempo transcurrido mientras el cuadro de diálogo está abierto se contará como tiempo de ejecuciónMsgBox "Duración: " & myTimer.Duration & Chr(13) & "Tiempo de suspensión: " & myTimer.SuspendDuration & Chr(13) & "Duración total: " & myTimer.TotalDurationmyTimer.Terminate() 'Detiene el temporizador'Uso de las propiedades Duration, SuspendDuration y TotalDuration en MsgBox'Mediante MsgBox se muestran las mediciones de tiempo finalesMsgBox "Duración: " & myTimer.Duration & Chr(13) & "Tiempo de suspensión: " & myTimer.SuspendDuration & Chr(13) & "Duración total: " & myTimer.TotalDurationEnd Sub
NOTAS
(1) Esta explicación se basa en el documento que ofrece la ayuda oficial de LibreOffice (ver en este enlace el texto original)
(2) Lo cual resulta necesario cuando queremos conocer tiempos de respuesta breves, como los que tarda un alumno en responder a un ítem.
(3) Esta librería es accesible desde el IDE siguiendo la siguiente ruta: Macros y diálogos de la aplicación | ScriptForge | SF_Timer, aunque lo que corresponde para acceder a ella es importarla mediante la instrucción GlobalScope.BasicLibraries.LoadLibrary("ScriptForge"), como tendremos ocasión de ver en la entrada. El contenido de SF_Timer nos muestra el código desarrollado, resultando evidente su formulación como clase, con sus propiedades y métodos. Para una sencilla introducción al paradigma de la Programación Orientada a Objetos (POO), ver [esta entrada].
(4) Podemos comprobar que la unidad de tiempo de base es el segundo, al que se añaden los milisegundos como parte decimal (de ahí que sea necesario utilizar variables de tipo decimal, como Double). Comparte la unidad con la función Timer(), pero no como medida del tiempo transcurrido desde medianoche, sino desde que se activa el servicio. Sobre la propiedad Duration ver la explicación dada en la entrada.
No hay comentarios:
Publicar un comentario
Comenta esta entrada