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

Reply via email to