| #include "oslib/osmodule.h" | |
| #include <stdio.h> | |
| #include "kernel.h" | |
| #include <limits.h> | |
| #include <errno.h> | |
| #include "oslib/taskwindow.h" | |
| #include "Python.h" | |
| int riscos_sleep(double delay) | |
| { | |
| os_t starttime, endtime, time; /* monotonic times (centiseconds) */ | |
| int *pollword, ret; | |
| osbool 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; | |
| } |