[plt-scheme] equivalent to atexit?
Thanks Eli - I'll look into scheme_add_atexit_closer and exit-handler more.
On Mon, Mar 23, 2009 at 10:42 PM, Eli Barzilay <eli at barzilay.org> wrote:
> At the Scheme level `exit' will just exit the process, so dynamic wind
> etc do nothing. For example,
>
> (dynamic-wind void exit (lambda () (printf "bye\n")))
>
> will not do the printout before leaving.
>
> There is a `scheme_add_atexit_closer' function in the mzscheme api,
> which might do what you want, for example:
>
> (require scheme/foreign)
> (unsafe!)
> ((get-ffi-obj "scheme_add_atexit_closer" #f
> (_fun (_fun _scheme _pointer _pointer -> _void)
> -> _void))
> (lambda (x _1 _2) (printf "bye\n")))
>
> but this is called for managed objects, so you might need to use some
> more of the C api to register your objects. (Or just do whatever you
> need, and make sure that there's at least one managed object that will
> cause your handler to be called.)
>
> If you prefer a Scheme solution, then perhaps it is better to change
> the exit handler:
>
> (exit-handler (let ([old (exit-handler)])
> (lambda (s) (printf "bye\n") (old s))))
>
> this will work if you do it when starting your code *and* if you
> always exit your program using `exit' (for example, you register an
> exception handler to print the error and call `exit' instead of
> letting it abort). But if that's what you're doing, you can just as
> well write your own `exit' function that will do the cleanup and then
> actually exit.
>
> --
> ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
> http://www.barzilay.org/ Maze is Life!
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20090324/3b4e727b/attachment.html>