equal
deleted
inserted
replaced
|
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 |
|
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 } |