PageRenderTime 273ms CodeModel.GetById 152ms app.highlight 3ms RepoModel.GetById 116ms app.codeStats 0ms

/RISCOS/sleep.c

http://unladen-swallow.googlecode.com/
C | 41 lines | 32 code | 6 blank | 3 comment | 4 complexity | 17ad3979cc25cb5b34b2317cb7ed7069 MD5 | raw file
 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
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}