Chrono Mock
IdiomaEspañol

Haz que el reloj de una app corra más rápido

Una prueba de 30 días tarda 30 días en caducar, a menos que puedas mover el tiempo. El consejo habitual es adelantar el reloj del sistema, lo que exige permisos de administrador y arrastra consigo a todos los demás programas del equipo. Esto mueve un solo proceso.

Cuánto de rápido

Elige un multiplicador entero. El reloj de la aplicación avanza esas veces más rápido que el real, a partir del momento en que empieza la sesión.

MultiplicadorUn minuto real se convierte enÚtil para
x60una horatareas por hora, tiempos de espera de sesión, vida útil de tokens
x1440un díacambios diarios, una prueba de 30 días en media hora
x43200una prueba de 30 díasver terminar toda la prueba mientras lees esto
x525600un añorenovaciones anuales, caducidad de certificados
x1000000unos 1,9 añosel tope
# Empezar en la hora real actual y correr un día por minuto
chrono run "C:\apps\test.exe" --mode x1440

# Empezar en una fecha elegida y acelerar desde ahí
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Mantener el reloj completamente quieto en su lugar
chrono run "C:\apps\test.exe" --mode frozen
Una grabación de una sesión que maneja otra aplicación de Windows. La ventana de la izquierda es Chrono Mock, con el reloj de la aplicación en 2038-01-19 subiendo a sesenta veces la velocidad real mientras el reloj real a su lado avanza unos pocos segundos. La ventana de la derecha es la aplicación probada, cuyo propio registro de sesión muestra que empezó el 2038-01-19 y lleva minutos en marcha frente a apenas media minuto en la sala.
Una sesión real, manejando una aplicación real. Fíjate en la ventana de la derecha: el programa probado registró su propio inicio el 19 de enero de 2038, y su sesión ha durado minutos mientras el reloj de la sala avanzó segundos. La velocidad se cambia mientras corre, sin reiniciar nada.

Lo que pilla a la gente: hay dos relojes

Acelerar el reloj de pared - lo que devuelven DateTime.Now y sus equivalentes - no acelera por sí solo una cuenta atrás. Son dos preguntas distintas que una aplicación puede hacer al sistema operativo, y mucho software mide «treinta días» con la segunda y no con la primera.

Por eso el eje de duraciones - contadores de ticks, suspensiones, esperas y temporizadores - es un interruptor aparte:

  • --scale-duration pasa también los contadores de ticks, las pausas y los temporizadores al reloj de la sesión, mientras que las esperas sobre objetos se cuentan y conservan su duración real. Sin él, x1440 acelera el calendario mientras un temporizador de cinco segundos sigue durando cinco segundos reales - solo un temporizador fijado para una fecha y hora sigue el reloj de la sesión en cada sesión.
  • --scale-qpc escala además el contador de alta resolución. Ahí es donde Python 3.13+ monotonic, .NET Stopwatch y Java nanoTime leen el tiempo transcurrido, y está desactivado por defecto porque escalarlo desestabilizó el renderizado en las pruebas.

Si el multiplicador parece no hacer nada con una cuenta atrás, casi siempre es por esto.

# Una app de temporizador: acelerar el calendario Y las cuentas atrás
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# Una app Python o .NET que mide el tiempo transcurrido con el contador de alta resolución
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Cambiar la velocidad sin reiniciar

El multiplicador puede cambiar en plena sesión, y el reloj se reancla en lugar de saltar, así que nunca retrocede cuando baja la velocidad. También puedes hacer saltar el reloj sin más - hacia delante, o hacia atrás como lo hace un portátil al resincronizarse con un servidor de hora, que es el caso que rompe todo lo que mide tiempo transcurrido sin una protección.

# Correr a x60 y pasar a x1440 a los dos segundos
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Correr y, a los cinco segundos, saltar el reloj a un momento elegido
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

Lo que no hará

  • No toca el reloj del sistema. Ese es el objetivo, no una limitación - pero significa que todo lo que lea la hora de un servidor, una base de datos u otra máquina no se ve afectado, y la auditoría te lo dice cuando ocurre.
  • Un salto cambia lo que ve la aplicación, no cuándo se despierta. Las pausas y los temporizadores ya entregados al kernel conservan la duración que recibieron al fijarse. La mayoría de las aplicaciones consultan el reloj, así que los saltos funcionan en la práctica - aunque no en todas.
  • No ralentiza el tiempo. Los multiplicadores son números enteros de uno en adelante, más un reloj congelado en cero.

Si algo de esto llegó a tu aplicación no es algo que deba darse por supuesto. La sesión lo dice →

Pruébalo