Chrono Mock

Spraw, żeby zegar jednej aplikacji szedł szybciej

30-dniowa wersja próbna wygasa po 30 dniach, chyba że umiesz przesunąć czas. Typowa rada to popchnąć zegar systemowy do przodu, co wymaga uprawnień administratora i pociąga za sobą wszystkie inne programy na komputerze. To przesuwa jeden proces.

Jak szybko

Wybierasz całkowity mnożnik. Zegar aplikacji idzie tyle razy szybciej niż prawdziwy, licząc od momentu, w którym zaczyna się sesja.

MnożnikJedna realna minuta toDo czego
x60godzinazadania godzinowe, wygasanie sesji, czas życia tokenów
x1440dobaprzejścia dobowe, 30-dniowa wersja próbna w pół godziny
x4320030-dniowa wersja próbnaobejrzenie jej całej w czasie czytania tej strony
x525600rokodnowienia roczne, wygasanie certyfikatów
x1000000około 1,9 rokusufit
# Zacznij od prawdziwego teraz i leć w tempie doby na minutę
chrono run "C:\apps\test.exe" --mode x1440

# Zacznij od wybranej daty i przyspieszaj od niej
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Albo zatrzymaj zegar zupełnie
chrono run "C:\apps\test.exe" --mode frozen
Nagranie sesji sterującej inną aplikacją Windows. Lewe okno to Chrono Mock z zegarem aplikacji na 2028-06-03 i prawdziwym na 2026-09-04, prędkość zmienia się z zamrożonej na x10 w trakcie sesji. Prawe okno to testowana aplikacja, której własny dziennik zapisał start sesji na 2028-06-03.
Prawdziwa sesja, prawdziwa aplikacja. Zwróć uwagę na prawe okno: testowany program zapisał 2028-06-03 we własnym dzienniku sesji. Prędkość zmienia się w trakcie, bez restartowania czegokolwiek.

Rzecz, która zaskakuje: zegary są dwa

Przyspieszenie zegara ściennego - tego, co zwraca DateTime.Now i jego odpowiedniki - samo w sobie nie przyspiesza odliczania. To dwa różne pytania, które aplikacja może zadać systemowi, a mnóstwo oprogramowania mierzy „trzydzieści dni" tym drugim, nie pierwszym.

Dlatego oś czasu trwania - liczniki taktów, uśpienia, czekania i timery - jest osobnym przełącznikiem:

  • --scale-duration przestawia uśpienia, czekania i timery również na zegar sesji. Bez tego x1440 pędzi kalendarzem naprzód, a pięciosekundowy timer nadal trwa pięć prawdziwych sekund.
  • --scale-qpc dokłada skalowanie licznika wysokiej rozdzielczości. To tam monotonic w Pythonie 3.13+, Stopwatch w .NET i nanoTime w Javie czytają czas trwania. Domyślnie wyłączone, bo skalowanie go destabilizowało renderowanie w testach.

Jeśli mnożnik zdaje się nie robić nic z odliczaniem, to prawie zawsze jest to ten powód.

# Aplikacja z timerem: przyspiesz kalendarz I odliczania
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# Aplikacja Pythona albo .NET mierząca czas licznikiem wysokiej rozdzielczości
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Zmiana prędkości bez restartu

Mnożnik można zmienić w trakcie sesji, a zegar jest wtedy przekotwiczany, nie przeskakiwany, więc nigdy nie cofa się przy spadku prędkości. Zegarem można też skoczyć wprost - do przodu albo do tyłu, tak jak robi to laptop po synchronizacji z serwerem czasu, co jest przypadkiem psującym wszystko, co mierzy czas trwania bez zabezpieczenia.

# Leć x60, po dwóch sekundach przełącz na x1440
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Po pięciu sekundach skocz zegarem na wybrany moment
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

Czego nie zrobi

  • Nie rusza zegara systemowego. To jest sens, a nie ograniczenie - ale oznacza, że cokolwiek czyta czas z serwera, z bazy danych albo z innej maszyny, pozostaje nietknięte, a audyt powie ci, kiedy tak się dzieje.
  • Skok zmienia to, co aplikacja widzi, a nie to, kiedy się budzi. Timery już oddane jądru chodzą na prawdziwym czasie. Większość aplikacji odpytuje zegar, więc skoki w praktyce działają - ale nie u wszystkich.
  • Nie spowalnia czasu. Mnożniki to liczby całkowite od jedynki w górę plus zamrożony zegar w zerze.

Tego, czy cokolwiek z tego dotarło do twojej aplikacji, nie warto zakładać. Sesja to mówi →

Wypróbuj