Ejecutar una función con retraso en Matlab

Publicado el 18 enero 2023 por Daniel Rodríguez @analyticslane

Generalmente al escribir un comando en Matlab queremos que este se ejecute al momento, y es lo que sucede. Pero, en algunas ocasiones puede ser interesante que la función no se ejecute al momento, sino que un tiempo después. Por ejemplo, para actualizar una figura con nuevos datos. Aunque el lenguaje no cuenta con una función para realizar esta trate específicamente, es posible ejecutar una función con retraso en Matlab usando un timer.

El timer de Matlab

La función timer de Matlab permite programar tareas para que se ejecuten periódicamente cada cierto tiempo. Tarea que generalmente se indica mediante una función handle. La función puede recibir diferentes valores opcionales que se deben pasar en pares nombre de la propiedad (una cadena de texto) y valor. Las propiedades más interesantes que admite la función son:

  • TimerFcn: la función que se desea ejecutar periódicamente.
  • Period: el tiempo en segundos entre cada una de las llamadas a la función.
  • StartDelay: retraso en segundos para que la función se ejecute por primera vez.
  • TasksToExecute: las veces que la función se va a ejecutar, debe ser un valor mayor de cero.
  • ExecutionMode: el modo en el que se mide el tiempo entre ejecuciones. Los posibles valores de este parámetro son:
    • singleShot: la tarea se ejecuta una única vez.
    • fixedRate: el tiempo entre las ejecuciones empieza contar cuando la ejecución anterior ha terminado.
    • fixedDelay: el tiempo entre ejecuciones empieza contar después del retraso.
    • fixedSpacing: la tarea se ejecuta en espacios fijos de tiempo.

Ejecutar una función con retraso en Matlab

En base a lo visto, para ejecutar una función con retraso en Matlab solamente se tendría que ejecutar el siguiente código.

T = timer('StartDelay', 5, 'TimerFcn', @(~, ~) msgbox('Mensaje con retraso'));
start(T);

En el que se define un retraso de cinco segundos ( StartDelay) para que se muestre por pantalla un mensaje con retraso. Con la función timer se crea un objeto. Para inicializar el contador se le debe pasar una señal al objeto usando para ello la función start(). Una vez hecho esto la función se ejecutará una vez pasados 5 segundos.

Ejecutar una función con retraso varias veces Matlab

Para que la función se ejecute varias es necesario agregar algunas opciones. La primera es indicar con TasksToExecute el número de ejecuciones, valor que por defeco es uno. Otra opción que se debe cambiar el modo de ejecución, por defecto es singleShot por lo que se debe seleccionar uno válido como fixedDelay. Además, también se debe iniciar el pedido entre ejecuciones. Por ejemplo, el siguiente código permite mostrar el mensaje dos veces, uno tras cinco segundos y el segundo dos segundos después (siente segundos después de iniciar el proceso).

T = timer('StartDelay', 5, 'TimerFcn', @(~, ~) msgbox('Mensaje con retraso'), ...
          'TasksToExecute', 2, 'ExecutionMode', 'fixedDelay', 'Period', 2);
start(T);

Conclusiones

En esta entrada se ha visto un método para ejecutar una función con retraso en Matlab, algo que nos puede ser útil cuando se desarrollan aplicaciones que interaccionan con usuarios.

Imagen de Rico Imbiky en Pixabay