Pausar un programa
Como vimos anteriormente en los ejemplos, los programas a veces necesitan repetir ciertas acciones periódicamente, ya sea en una programación simple o después de que los intentos anteriores hayan fallado. Cuando esto se hace en bucle, se recomienda pausar el programa regularmente para evitar peticiones demasiado frecuentes y una carga innecesaria de la CPU, así como para dar tiempo a que los «actores» externos hagan su trabajo (por ejemplo, si estamos esperando datos de otro programa, cargando el histórico de cotizaciones, etc.).
Para ello, MQL5 proporciona la función Sleep. En esta sección se ofrece su descripción formal, y en la siguiente se dará un ejemplo, junto con las funciones para las mediciones de intervalos de tiempo.
void Sleep(int milliseconds)
La función pausa la ejecución del programa MQL durante el número de milisegundos especificado. Tras su expiración, las instrucciones que siguen a la llamada Sleep seguirán ejecutándose.
Tiene sentido utilizar la función en primer lugar en scripts y servicios porque este tipo de programas no tienen otra forma de esperar.
En los Asesores Expertos e indicadores se recomienda utilizar temporizadores y el evento OnTimer. En este esquema, el programa MQL devuelve el control al terminal y será llamado después de un intervalo especificado.
Además, la función Sleep no puede llamarse desde los indicadores, ya que éstos se ejecutan en hilos de la interfaz del terminal, cuya suspensión afectaría a la representación de los gráficos.
Si el usuario interrumpe el programa MQL desde la interfaz del terminal mientras espera a que finalice la llamada Sleep, la salida de la función se produce inmediatamente (en 100 ms); es decir, la pausa finaliza antes de lo previsto. Esto activará la bandera de parada _StopFlag (también disponible a través de la función IsStopped), y el programa debe detener la ejecución lo más rápida y correctamente posible.