• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)10 int 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