no title pasted by anonymous on Fri Mar 8 18:07:25 2013
#> int callback_fd = -1; int callback_id = -1; static int chicken_callback (int cb_id){ callback_id = cb_id; if (callback_fd >= 0) { write(callback_fd, "-", 1); return(-1); } return(0); } <# (define-external callback_fd int -1) (define-external callback_id int -1) (define our-func (foreign-value "&chicken_callback" (function bool (int)))) (define miau (make-mutex)) (define ready (make-condition-variable 'testo)) (thread-start! (make-thread (lambda () (mutex-lock! miau) (let-values (((in out) (create-pipe))) (set! callback_fd out) (let ((in* (open-input-file* in))) (condition-variable-signal! ready) (print "entering the loop") (let loop () (print "starting to sit on the pipe") (thread-wait-for-i/o! in) (print "zzZzZzz !!! whoa whats on?") (read-char in*) (print "aha ok got that...") (print "dont speak to me till im finished!!") (mutex-lock! miau) (thread-sleep! 1) (condition-variable-signal! ready) (loop))))))) (mutex-unlock! miau ready) (let loop () (print "lets wake him up!") (dyncall bool our-func (int 1)) (mutex-unlock! miau ready) (print "ok let him sleep\n") (thread-sleep! 1) (loop))
no title added by anonymous on Fri Mar 8 18:12:17 2013
(mutex-lock! miau) (thread-start! (make-thread (lambda () (let-values (((in out) (create-pipe))) (set! callback_fd out) (let ((in* (open-input-file* in))) (condition-variable-signal! ready) (print "entering the loop") (let loop () (print "starting to sit on the pipe") (thread-wait-for-i/o! in) (print "zzZzZzz !!! whoa whats on?") (read-char in*) (print "aha ok got that...") (print "dont speak to me till im finished!!") (mutex-lock! miau) (thread-sleep! 1) (print "done!") (condition-variable-signal! ready) (loop))))))) (mutex-unlock! miau ready)