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’.
>

Reply via email to