From c9492355f06d748a6793385b4c770ce1f8a2b14d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=9F=93?= <56108982+XR-stb@users.noreply.github.com> Date: Wed, 24 May 2023 13:27:38 +0800 Subject: [PATCH] fix time module bug pocketpy.h There was a problem with the implementation of the time() function, and I couldn't get the correct time, so I replaced the original implementation with std::chrono::system_clock:now(). --- src/pocketpy.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/pocketpy.h b/src/pocketpy.h index 9d636bc8..044d617b 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -1015,17 +1015,15 @@ inline void init_builtins(VM* _vm) { inline void add_module_time(VM* vm){ PyObject* mod = vm->new_module("time"); vm->bind_func<0>(mod, "time", [](VM* vm, ArgsView args) { - auto now = std::chrono::high_resolution_clock::now(); - return VAR(std::chrono::duration_cast(now.time_since_epoch()).count() / 1000000.0); + auto now = std::chrono::system_clock::now(); + return VAR(std::chrono::duration_cast(now.time_since_epoch()).count() / 1000.); }); vm->bind_func<1>(mod, "sleep", [](VM* vm, ArgsView args) { - f64 seconds = VAR_F(args[0]); - auto begin = std::chrono::high_resolution_clock::now(); - while(true){ - auto now = std::chrono::high_resolution_clock::now(); - f64 elapsed = std::chrono::duration_cast(now - begin).count() / 1000000.0; - if(elapsed >= seconds) break; + int64_t now = std::chrono::system_clock::now().time_since_epoch().count(); + int64_t end = now + 1000'0000 * vm->num_to_float(args[0]); + while (now < end) { + now = std::chrono::system_clock::now().time_since_epoch().count(); } return vm->None; });