On Wed, 15 Dec 2004 06:04:37 -0500, David Roundy <[EMAIL PROTECTED]> wrote: > On Wed, Dec 15, 2004 at 04:09:04AM +0100, Sebastian Sylvan wrote: > > FMUSIC_MODULE * F_API FMUSIC_LoadSong( > > const char *name > > ); > > > > By doing this in Haskell: > > > > data MusicModule = MusicModule > > > > foreign import ccall "fmod.h FMUSIC_LoadSong" fmusic_LoadSong :: > > CString -> IO ForeignPtr MusicModule) > > > > I assume that this is how the ForeignPtr is meant to be used (with a > > dummy data type). > > No, a ForeignPtr is a purely haskell object. The C function returns a > Ptr. You could create a ForeignPtr from the Ptr if you want it to be > automatically freed (calling somesort of FreeSong, presumably) when it gets > garbage collected.
Ah. Thanks. Another problem! When a handle is not being referenced I don't want it to be garbage collected if the isPlaying function returns True (in other words I want the song to finish playing even if it's not being referenced anymore). The current plan of attack is to have the finalizer fork off a thread which does nothing but check the status of the song every 500ms or so and when it's finished, releases it. But since I really only need to check it every time the garbage collector wants to release it maybe there's a better way? So I want to annotate the ForeignPtr with a function which can defer it's release based on the status of the handle. Is there a way to do this? Sadly the C library doesn't seem to provide a callback for when the song has finished playing which would be ideal. /S -- Sebastian Sylvan +46(0)736-818655 UIN: 44640862 _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
