Chrono Mock
ภาษาไทย

ทำให้นาฬิกาของแอปหนึ่งตัวเดินเร็วขึ้น

ช่วงทดลองใช้ 30 วันต้องใช้เวลา 30 วันกว่าจะหมด เว้นแต่คุณจะเลื่อนเวลาได้ คำแนะนำทั่วไปคือเลื่อนนาฬิกาของระบบไปข้างหน้า ซึ่งต้องใช้สิทธิ์ผู้ดูแลระบบและลากโปรแกรมอื่นทุกตัวในเครื่องไปด้วย เครื่องมือนี้เลื่อนเพียงหนึ่งโพรเซสแทน

เร็วแค่ไหน

เลือกตัวคูณที่เป็นจำนวนเต็ม นาฬิกาของแอปจะเดินเร็วกว่านาฬิกาจริงตามจำนวนเท่านั้น นับจากช่วงเวลาที่เซสชันเริ่ม

ตัวคูณหนึ่งนาทีจริงกลายเป็นเหมาะสำหรับ
x60หนึ่งชั่วโมงงานรายชั่วโมง การหมดเวลาของเซสชัน อายุของโทเค็น
x1440หนึ่งวันการเปลี่ยนวันรายวัน ช่วงทดลองใช้ 30 วันในครึ่งชั่วโมง
x43200ช่วงทดลองใช้ 30 วันดูช่วงทดลองใช้ทั้งช่วงจบลงระหว่างที่คุณอ่านข้อความนี้
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 และของที่เทียบเท่าคืนมา - ไม่ได้เร่งการนับถอยหลังไปด้วยโดยอัตโนมัติ นั่นเป็นสองคำถามที่ต่างกันที่แอปถามระบบปฏิบัติการได้ และซอฟต์แวร์จำนวนมากวัด “สามสิบวัน” ด้วยอันหลังแทนที่จะเป็นอันแรก

ดังนั้นแกนระยะเวลา - จำนวนติ๊ก sleep wait และตัวจับเวลา - จึงเป็นสวิตช์แยกต่างหาก:

  • --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

สิ่งที่มันจะไม่ทำ

  • มันไม่แตะนาฬิกาของระบบ นั่นคือประเด็น ไม่ใช่ข้อจำกัด - แต่หมายความว่าอะไรก็ตามที่อ่านเวลาจากเซิร์ฟเวอร์ ฐานข้อมูล หรือเครื่องอื่นจะไม่ได้รับผลกระทบ และการตรวจสอบจะบอกคุณเมื่อเกิดเรื่องนี้
  • การกระโดดเปลี่ยนสิ่งที่แอปพลิเคชันเห็น ไม่ใช่เวลาที่มันตื่น การหลับและตัวจับเวลาที่ส่งให้เคอร์เนลไปแล้วจะคงความยาวที่ได้รับตอนตั้งไว้ แอปพลิเคชันส่วนใหญ่สอบถามนาฬิกาเป็นระยะ การกระโดดจึงได้ผลในทางปฏิบัติ แต่ไม่ใช่ทุกตัว
  • มันไม่ทำให้เวลาช้าลง ตัวคูณเป็นจำนวนเต็มตั้งแต่หนึ่งขึ้นไป บวกนาฬิกาที่หยุดค้างที่ศูนย์

สิ่งเหล่านี้ไปถึงแอปของคุณหรือไม่ไม่ใช่เรื่องที่ควรสันนิษฐาน เซสชันบอกคุณเอง →

ลองใช้