diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-09-06 23:42:05 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-09-06 23:42:05 +0900 |
| commit | fdaec907802c11867e977b30b2e1dddcb7a0ebcd (patch) | |
| tree | b64aa0250495ed64af4011bc239d823b78319800 /mrbgems/mruby-sleep | |
| parent | 72522f8e0ecd7a94af4df0cf7c892fb5ed971deb (diff) | |
| download | mruby-fdaec907802c11867e977b30b2e1dddcb7a0ebcd.tar.gz mruby-fdaec907802c11867e977b30b2e1dddcb7a0ebcd.zip | |
Make `Kernel#sleep` to accept float as a duration time.
But when `MRB_WITHOUT_FLOAT` is set, there's no way to sleep for
sub seconds. So mruby specific `usleep` is provided.
Diffstat (limited to 'mrbgems/mruby-sleep')
| -rw-r--r-- | mrbgems/mruby-sleep/src/mrb_sleep.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index 37d18e482..ce643cf12 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -37,25 +37,38 @@ #include "mruby.h" +/* not implemented forever sleep (called without an argument)*/ static mrb_value mrb_f_sleep(mrb_state *mrb, mrb_value self) { - time_t beg, end; + time_t beg = time(0); + time_t end; +#ifndef MRB_WITHOUT_FLOAT + mrb_float sec; + + mrb_get_args(mrb, "f", &sec); + if (sec >= 0) { + usleep(sec * 1000000); + } + else { + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + } +#else mrb_int sec; - beg = time(0); - /* not implemented forever sleep (called without an argument)*/ mrb_get_args(mrb, "i", &sec); if (sec >= 0) { sleep(sec); } else { mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); } +#endif end = time(0) - beg; return mrb_fixnum_value(end); } +/* mruby special; needed for mruby without float numbers */ static mrb_value mrb_f_usleep(mrb_state *mrb, mrb_value self) { |
