; C code ; #include ; #include ; ; int64_t counter = 0; ; ; void wait_for_a_while(uv_idle_t* handle, int status) { ; counter++; ; ; if (counter >= 10e6) ; uv_idle_stop(handle); ; } ; ; int main() { ; uv_idle_t idler; ; ; uv_idle_init(uv_default_loop(), &idler); ; uv_idle_start(&idler, wait_for_a_while); ; ; printf("Idling...\n"); ; uv_run(uv_default_loop(), UV_RUN_DEFAULT); ; ; return 0; ; } (import foreign) (foreign-declare "#import ") (define-foreign-type uv-idle-t "uv_idle_t") (define-foreign-type uv-idle-t* (c-pointer uv-idle-t)) (define-foreign-type uv-loop-t "uv_loop_t") (define uv-run (foreign-lambda int "uv_run" (c-pointer uv-loop-t) int)) (define uv-default-loop (foreign-lambda (c-pointer uv-loop-t) "uv_default_loop")) (define uv-idle-init (foreign-lambda int "uv_idle_init" (c-pointer uv-loop-t) (c-pointer uv-idle-t))) (define uv-idle-start (foreign-lambda int "uv_idle_start" (c-pointer uv-idle-t) c-pointer)) (define uv-idle-stop (foreign-lambda int "uv_idle_stop" (c-pointer uv-idle-t))) (define (wait-for-a-while handle status) (let lp ((counter 0)) (if (>= counter 10000000) (uv-idle-stop handle) (lp (+ counter 1))))) (define-external idler uv-idle-t) (define idler-ref (foreign-value "&idler" c-pointer)) (uv-idle-init (uv-default-loop) idler-ref) (uv-idle-start idler-ref wait-for-a-while) (uv-run (uv-default-loop) 0)