symbian-qemu-0.9.1-12/python-2.6.1/RISCOS/sleep.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 }