Fă ceasul unei aplicații să meargă mai repede
O probă de 30 de zile durează 30 de zile până expiră, dacă nu poți muta timpul. Sfatul obișnuit este să împingi ceasul sistemului înainte, ceea ce cere drepturi de administrator și târăște după el toate celelalte programe de pe mașină. Aici muți în schimb un singur proces.
Cât de repede
Alege un multiplicator întreg. Ceasul aplicației avansează de atâtea ori mai repede decât cel real, de la orice moment la care pornește sesiunea.
| Multiplicator | Un minut real devine | Util pentru |
|---|---|---|
x60 | o oră | joburi orare, timeout-uri de sesiune, durata de viață a token-urilor |
x1440 | o zi | treceri zilnice, o probă de 30 de zile într-o jumătate de oră |
x43200 | o probă de 30 de zile | urmărirea întregii probe până se încheie cât citești asta |
x525600 | un an | reînnoiri anuale, expirarea certificatelor |
x1000000 | aproape 1,9 ani | limita maximă |
# Pornește de la ora reală de acum și rulează o zi pe minut chrono run "C:\apps\test.exe" --mode x1440 # Pornește de la o dată aleasă și accelerează de acolo chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440 # Ține ceasul complet pe loc, în schimb chrono run "C:\apps\test.exe" --mode frozen
Partea care îi prinde pe oameni nepregătiți: există două ceasuri
Accelerarea ceasului de perete - ceea ce returnează DateTime.Now și
echivalentele lui - nu accelerează, de una singură, o numărătoare inversă.
Acestea sunt două întrebări diferite pe care o aplicație le poate pune sistemului de operare, iar
multe programe măsoară „treizeci de zile” cu a doua, nu cu prima.
De aceea axa duratelor - contoarele de tick-uri, sleep-urile, așteptările și temporizatoarele - este un comutator separat:
--scale-durationtrece și contoarele de tick-uri, pauzele și timerele pe ceasul sesiunii, iar așteptările pe obiecte sunt numărate și își păstrează durata reală. Fără el,x1440gonește calendarul înainte, în timp ce un timer de cinci secunde durează tot cinci secunde reale - doar un timer setat pentru o dată și o oră urmează ceasul sesiunii în fiecare sesiune.--scale-qpcscalează suplimentar contorul de înaltă rezoluție. Acolo citesc timpul scursmonotonicdin Python 3.13+,Stopwatchdin .NET șinanoTimedin Java, iar este dezactivat implicit pentru că scalarea lui a destabilizat randarea în teste.
Dacă multiplicatorul pare să nu facă nimic unei numărători inverse, aproape întotdeauna asta este motivul.
# O aplicație cu cronometru: accelerează calendarul ȘI numărătorile inverse chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration # O aplicație Python sau .NET care măsoară timpul scurs pe contorul de înaltă rezoluție chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc
Schimbarea vitezei fără repornire
Multiplicatorul se poate schimba în timpul sesiunii, iar ceasul este reancorat, nu sărit, așa că nu merge niciodată înapoi când viteza scade. Poți și să sari ceasul pur și simplu - înainte sau înapoi, așa cum face un laptop după ce se resincronizează cu un server de timp, cazul care strică orice măsoară timpul scurs fără o protecție.
# Rulează la x60, apoi treci la x1440 după două secunde chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440 # Rulează, apoi sari ceasul la un moment ales după cinci secunde chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00
Ce nu va face
- Nu atinge ceasul sistemului. Acesta este rostul, nu o limitare - dar înseamnă că orice citește ora de la un server, dintr-o bază de date sau de pe altă mașină rămâne neafectat, iar auditul îți va spune când se întâmplă asta.
- Un salt schimbă ce vede aplicația, nu când se trezește. Pauzele și timerele deja predate nucleului își păstrează durata primită când au fost setate. Cele mai multe aplicații interoghează ceasul, așa că salturile funcționează în practică - dar nu la toate.
- Nu încetinește timpul. Multiplicatorii sunt numere întregi de la unu în sus, plus un ceas oprit la zero.
Dacă ceva din toate acestea a ajuns la aplicația ta nu este un lucru de presupus. Sesiunea o spune →