Chrono Mock
МоваУкраїнська

Змусьте годинник одного застосунку йти швидше

30-денний пробний період спливає за 30 днів, якщо ви не можете зсунути час. Звичайна порада — перевести системний годинник уперед, що потребує прав адміністратора й тягне за собою всі інші програми на машині. Тут натомість зсувається один процес.

Наскільки швидко

Виберіть цілочисельний множник. Годинник застосунку йде в стільки разів швидше за справжній, починаючи з моменту, з якого стартує сесія.

МножникОдна справжня хвилина стаєДля чого корисно
x60годиноюпогодинні завдання, тайм-аути сесій, час життя токенів
x1440добоюдобові переходи, 30-денний пробний період за півгодини
x4320030-денним пробним періодомспостерігати за закінченням усього пробного періоду, поки ви це читаєте
x525600рокомщорічні поновлення, спливання сертифікатів
x1000000приблизно 1,9 рокустеля
# Почати зі справжнього часу зараз і йти добу за хвилину
chrono run "C:\apps\test.exe" --mode x1440

# Почати з обраної дати й прискорюватися від неї
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Або взагалі зупинити годинник
chrono run "C:\apps\test.exe" --mode frozen
Запис сесії, що керує іншим застосунком Windows. Ліве вікно — Chrono Mock: годинник застосунку на 2038-01-19 росте зі швидкістю, що в шістдесят разів перевищує справжню, а справжній годинник поруч зсувається лише на кілька секунд. Праве вікно — застосунок, що тестується, власний запис сесії якого показує, що він почався 2038-01-19 і працює вже хвилини, тоді як у кімнаті минуло ледве пів хвилини.
Справжня сесія, що керує справжнім застосунком. Зверніть увагу на праве вікно: програма, що тестується, записала власний старт як 19 січня 2038 року, а її сесія триває хвилини, поки годинник у кімнаті зсунувся на секунди. Швидкість змінюється на ходу, без перезапуску будь-чого.

Те, на чому всі попадаються: годинників два

Прискорення настінного годинника — того, що повертають DateTime.Now і його аналоги, — саме по собі не прискорює зворотний відлік. Це два різні питання, які застосунок може поставити операційній системі, і безліч програм вимірюють «тридцять днів» другим, а не першим.

Тому вісь тривалостей — лічильники тіків, затримки, очікування й таймери — це окремий перемикач:

  • --scale-duration переводить на годинник сесії також лічильники тиків, затримки сну й таймери, а очікування об’єктів рахуються і зберігають реальну тривалість. Без нього x1440 жене календар уперед, а п’ятисекундний таймер і далі триває п’ять реальних секунд - лише таймер, заведений на конкретні дату й час, іде за годинником сесії в кожній сесії.
  • --scale-qpc додатково масштабує високоточний лічильник. Саме з нього читають минулий час monotonic у Python 3.13+, Stopwatch у .NET і nanoTime у Java, і він вимкнений за замовчуванням, бо його масштабування дестабілізувало відмальовування в тестах.

Якщо здається, що множник нічого не робить зі зворотним відліком, майже завжди річ у цьому.

# Застосунок-таймер: прискорити календар І зворотні відліки
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# Застосунок на Python або .NET, що вимірює минулий час за високоточним лічильником
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Зміна швидкості без перезапуску

Множник можна змінювати посеред сесії, а годинник при цьому заново прив’язується, а не стрибає, тож він ніколи не йде назад, коли швидкість падає. Годинником можна й просто стрибнути — уперед або назад, як це робить ноутбук після повторної синхронізації із сервером часу, а це той випадок, що ламає все, що вимірює минулий час без захисту.

# Працювати на x60, потім за дві секунди перемкнутися на x1440
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Запустити, потім за п’ять секунд перекинути годинник на обраний момент
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

Чого він не робить

  • Не чіпає системний годинник. У цьому сенс, а не обмеження, — але це означає, що все, що читає час із сервера, з бази даних чи з іншої машини, лишається недоторканим, і аудит скаже вам, коли так станеться.
  • Стрибок змінює те, що бачить програма, а не те, коли вона прокидається. Затримки сну й таймери, уже передані ядру, зберігають тривалість, отриману під час встановлення. Більшість програм опитує годинник, тож стрибки на практиці працюють - але не в усіх.
  • Час не сповільнюється. Множники — це цілі числа від одиниці й вище, плюс зупинений годинник на нулі.

Чи дійшло щось із цього до вашого застосунку — не те, що варто припускати. Про це скаже сесія →

Спробуйте