2013/5/31 Ludovic Courtès <[email protected]>
> Xin Wang <[email protected]> skribis:
>
> > In Guile, the equivalent of kill-thread is cancel-thread, and is there
> any
> > equivalent of break-thread?
> >
> > [1] http://docs.racket-lang.org/reference/breakhandler.html
>
> If I understand correctly, “breaks” are similar to Guile’s “asyncs”
> (info "(guile) Asyncs").
>
> However, I don’t understand what you’re trying to achieve. Could you
> give another example of the behavior you’re after?
>
>
I was reading source code of Arc language[1], and wondering if it is
possible to port it to Guile.
It define a function to handle HTTP request in srv.arc(L48):
(def handle-request-1 (s)
--- pruned ---
(with (th1 nil th2 nil)
(= th1 (thread
(after (handle-request-thread i o ip)
(close i o)
(kill-thread th2))))
(= th2 (thread
(sleep threadlife*)
(unless (dead th1)
(prn "srv thread took too long for " ip))
(break-thread th1)
(force-close i o))))))))
It create two threads to handle a request, one do main stuff and anthor one
wait to kill first one if it takes too much time.
Although I'm not quite sure, I think one reason to use 'kill-thread' and
'break-thread' differently is to make sure that exception handler function
is fully executed. ('after' is implemented by dynamic-wind).
[1] http://ycombinator.com/arc/*arc3.1.tar*
> Thanks,
> Ludo’.
>
>
>