Faça o relógio de um app correr mais rápido
Um teste de 30 dias leva 30 dias para expirar, a menos que você consiga mover o tempo. O conselho habitual é adiantar o relógio do sistema, o que exige direitos de administrador e arrasta junto todos os outros programas da máquina. Isto move um processo só.
Quão rápido
Escolha um multiplicador inteiro. O relógio do aplicativo avança essas vezes mais rápido que o real, a partir do momento em que a sessão começa.
| Multiplicador | Um minuto real vira | Útil para |
|---|---|---|
x60 | uma hora | tarefas horárias, tempos limite de sessão, duração de tokens |
x1440 | um dia | viradas diárias, um teste de 30 dias em meia hora |
x43200 | um teste de 30 dias | ver todo o período de teste acabar enquanto você lê isto |
x525600 | um ano | renovações anuais, expiração de certificados |
x1000000 | cerca de 1,9 ano | o teto |
# Começar na hora real de agora e correr um dia por minuto chrono run "C:\apps\test.exe" --mode x1440 # Começar em uma data escolhida e acelerar a partir dela chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440 # Manter o relógio completamente parado, em vez disso chrono run "C:\apps\test.exe" --mode frozen
O que pega as pessoas de surpresa: existem dois relógios
Acelerar o relógio de parede - o que DateTime.Now e seus
equivalentes retornam - não acelera, por si só, uma contagem regressiva. São duas
perguntas diferentes que um aplicativo pode fazer ao sistema operacional, e muito software mede
“trinta dias” com a segunda em vez da primeira.
Então o eixo de duração - contagens de ticks, suspensões, esperas e temporizadores - é uma chave separada:
--scale-durationpõe também os contadores de ticks, as pausas e os temporizadores no relógio da sessão, enquanto as esperas por objetos são contadas e mantêm a duração real. Sem ele,x1440acelera o calendário enquanto um temporizador de cinco segundos continua durando cinco segundos reais - só um temporizador marcado para uma data e hora segue o relógio da sessão em toda sessão.--scale-qpcescala adicionalmente o contador de alta resolução. É de onde Python 3.13+monotonic, .NETStopwatche JavananoTimeleem o tempo decorrido, e vem desativado por padrão porque escalá-lo desestabilizou a renderização nos testes.
Se o multiplicador parece não fazer nada com uma contagem regressiva, quase sempre é por isso.
# Um app de temporizador: acelerar o calendário E as contagens regressivas chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration # Um app Python ou .NET que mede o tempo decorrido no contador de alta resolução chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc
Mudando a velocidade sem reiniciar
O multiplicador pode mudar no meio da sessão, e o relógio é reancorado em vez de saltar, então ele nunca volta atrás quando a velocidade cai. Você também pode fazer o relógio saltar de uma vez - para frente, ou para trás do jeito que um notebook faz depois de ressincronizar com um servidor de horário, que é o caso que quebra tudo o que mede tempo decorrido sem uma proteção.
# Rodar a x60 e passar para x1440 depois de dois segundos chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440 # Rodar e, depois de cinco segundos, saltar o relógio para um momento escolhido chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00
O que ele não faz
- Ele não mexe no relógio do sistema. Esse é o ponto, não uma limitação - mas significa que tudo o que lê a hora de um servidor, de um banco de dados ou de outra máquina não é afetado, e a auditoria avisa quando isso acontece.
- Um salto muda o que o aplicativo vê, não quando ele acorda. Pausas e temporizadores já entregues ao kernel mantêm a duração que receberam ao serem marcados. A maioria dos aplicativos consulta o relógio, então os saltos funcionam na prática - mas não em todos.
- Ele não desacelera o tempo. Os multiplicadores são números inteiros de um para cima, mais um relógio congelado em zero.
Se algo disso chegou ao seu aplicativo não é algo para presumir. A sessão diz →