1 #include "oslib/osmodule.h" 2 #include <stdio.h> 3 #include "kernel.h" 4 #include <limits.h> 5 #include <errno.h> 6 #include "oslib/taskwindow.h" 7 #include "Python.h" 8 9 riscos_sleep(double delay)10int riscos_sleep(double delay) 11 { 12 os_t starttime, endtime, time; /* monotonic times (centiseconds) */ 13 int *pollword, ret; 14 osbool claimed; 15 16 /* calculate end time */ 17 starttime = os_read_monotonic_time(); 18 if (starttime + 100.0*delay >INT_MAX) 19 endtime = INT_MAX; 20 else 21 endtime = (os_t)(starttime + 100.0*delay); 22 23 /* allocate (in RMA) and set pollword for xupcall_sleep */ 24 pollword = osmodule_alloc(4); 25 *pollword = 1; 26 27 time = starttime; 28 ret = 0; 29 while ( time<endtime && time>=starttime ) { 30 xupcall_sleep (pollword, &claimed); 31 if (PyErr_CheckSignals()) { 32 ret = 1; 33 break; 34 } 35 time = os_read_monotonic_time(); 36 } 37 38 /* deallocate pollword */ 39 osmodule_free(pollword); 40 return ret; 41 } 42