blob: 0aeba55b17a00f222825c2efa8f6cde706b2879b [file] [log] [blame]
Guido van Rossumbceccf52001-04-10 22:07:43 +00001#include "osmodule.h"
2#include <stdio.h>
3#include "kernel.h"
4#include <limits.h>
5#include <errno.h>
6#include "taskwindow.h"
7#include "Python.h"
8
9
10int sleep(double delay)
11{
12 os_t starttime, endtime, time; /* monotonic times (centiseconds) */
13 int *pollword, ret;
14 bool 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}