Trên các hệ thống unix, libfaketime là giải pháp tiêu chuẩn thực tế cho vấn đề này trong phần mềm. Nó thực hiện một loại hoạt động trung gian giữa ứng dụng của bạn và thư viện thời gian của hệ thống. Các yêu cầu được chuyển qua hệ thống, nhưng các phản hồi được sửa đổi khi cần thiết. Nó cũng sửa đổi kết quả của các stat()
cuộc gọi, vì vậy thời gian sửa đổi tệp & c. cũng được sửa đổi.
Các cài đặt được thực hiện với các biến môi trường, vì vậy bạn có thể phải tìm hiểu về các biến đó nếu bạn chưa quen với hoạt động của chúng.
libfaketime hỗ trợ bù đắp tương đối và tuyệt đối, thời gian dừng và chạy và tăng tốc hoặc giảm tốc độ. Tôi không biết về việc chạy ngược lại, mặc dù.
Lưu ý rằng phiên bản hiện tại giả vờ giây là độ phân giải thời gian cao nhất hiện có và chuyển các phần phụ thứ hai của phản hồi thông qua ứng dụng không được sửa đổi. Do đó, nếu bạn giảm tốc độ đồng hồ xuống một nửa tốc độ, một chương trình nhận biết giây phụ thực hiện các cuộc gọi thời gian rất nhanh sẽ trải nghiệm toàn bộ giây thứ hai sau nhau thay vì chỉ mất hai lần thời gian. Nếu đồng hồ bị dừng, điều này có nghĩa là ứng dụng sẽ thấy một thời gian ngẫu nhiên trong giây được chọn.
Thật không may, Github đã ngừng hoạt động ngày hôm nay, vì vậy các tài liệu không có sẵn ngay bây giờ, nhưng điều đó có thể sẽ được khắc phục sớm.
Biên tập:
Với Github sao lưu, tôi đã thử nó và thấy mã thay đổi tốc độ đủ chung để nó hoạt động tốt với các giá trị âm hoặc bất cứ thứ gì khác được chấp nhận atof()
.
Tuy nhiên, một vấn đề khác trở nên rõ ràng: Để thay đổi tốc độ, nguồn gốc thời gian là cần thiết ngoài thời gian thực hiện tại và thời gian bù mong muốn. Nguồn gốc này được đặt độc lập cho các quy trình con, do đó (khi chạy ngược lại ở tốc độ danh nghĩa) khi quy trình cha đã rút lại một phút, một quy trình con mới được sinh ra sẽ thấy thời gian hiện tại muộn hơn hai phút so với quy trình cha mẹ.