| #include "osmodule.h" |
| #include <stdio.h> |
| #include "kernel.h" |
| #include <limits.h> |
| #include <errno.h> |
| #include "taskwindow.h" |
| #include "Python.h" |
| |
| |
| int sleep(double delay) |
| { |
| os_t starttime, endtime, time; /* monotonic times (centiseconds) */ |
| int *pollword, ret; |
| bool claimed; |
| |
| /* calculate end time */ |
| starttime = os_read_monotonic_time(); |
| if (starttime + 100.0*delay >INT_MAX) |
| endtime = INT_MAX; |
| else |
| endtime = (os_t)(starttime + 100.0*delay); |
| |
| /* allocate (in RMA) and set pollword for xupcall_sleep */ |
| pollword = osmodule_alloc(4); |
| *pollword = 1; |
| |
| time = starttime; |
| ret = 0; |
| while ( time<endtime && time>=starttime ) { |
| xupcall_sleep (pollword, &claimed); |
| if (PyErr_CheckSignals()) { |
| ret = 1; |
| break; |
| } |
| time = os_read_monotonic_time(); |
| } |
| |
| /* deallocate pollword */ |
| osmodule_free(pollword); |
| return ret; |
| } |