diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-02-09 12:52:04 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-02-09 12:52:04 +0200 |
commit | f7662645821d4528f0e36a51ed8d41749748230e (patch) | |
tree | 5b8aab77dccd6f25b3956044a22c1fc15c7ad1d4 | |
parent | f7c2410e65e3d0d1278c22cbf457fa0ac5c205a2 (diff) |
unix: Implement time.sleep().
-rw-r--r-- | unix/time.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/unix/time.c b/unix/time.c index 9d8cf497c..6dba9f0d0 100644 --- a/unix/time.c +++ b/unix/time.c @@ -1,5 +1,7 @@ #include <string.h> #include <time.h> +#include <sys/time.h> +#include <math.h> #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); } |