2013/6/2 Ludovic Courtès <[email protected]>
> Xin Wang <[email protected]> skribis:
>
> > 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.
>
> Here ‘break-thread’ in the first thread appears to be equivalent to
> Guile’s ‘cancel-thread’.
>
Do you mean 'kill-thread' in the first thread?
> > 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).
>
> Hmm, I guess I still don’t understand what ‘break-thread’ is supposed to
> do.
>
> Ludo’.
>