From f7662645821d4528f0e36a51ed8d41749748230e Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 9 Feb 2014 12:52:04 +0200 Subject: [PATCH] unix: Implement time.sleep(). --- unix/time.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/unix/time.c b/unix/time.c index 9d8cf497c4..6dba9f0d09 100644 --- a/unix/time.c +++ b/unix/time.c @@ -1,5 +1,7 @@ #include #include +#include +#include #include "misc.h" #include "mpconfig.h" @@ -23,8 +25,24 @@ static mp_obj_t mod_time_clock() { } static MP_DEFINE_CONST_FUN_OBJ_0(mod_time_clock_obj, mod_time_clock); +static mp_obj_t mod_time_sleep(mp_obj_t arg) { +#if MICROPY_ENABLE_FLOAT + struct timeval tv; + machine_float_t val = mp_obj_get_float(arg); + double ipart; + tv.tv_usec = round(modf(val, &ipart) * 1000000); + tv.tv_sec = ipart; + select(0, NULL, NULL, NULL, &tv); +#else + sleep(mp_obj_get_int(arg)); +#endif + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_1(mod_time_sleep_obj, mod_time_sleep); + void time_init() { mp_obj_t m = mp_obj_new_module(QSTR_FROM_STR_STATIC("time")); rt_store_attr(m, QSTR_FROM_STR_STATIC("time"), (mp_obj_t)&mod_time_time_obj); rt_store_attr(m, QSTR_FROM_STR_STATIC("clock"), (mp_obj_t)&mod_time_clock_obj); + rt_store_attr(m, QSTR_FROM_STR_STATIC("sleep"), (mp_obj_t)&mod_time_sleep_obj); }