[Haskell-cafe] scheduling an alarm

Thomas DuBuisson thomas.dubuisson at gmail.com
Thu Jan 28 03:15:55 EST 2010


Brian Denheyer <briand at aracnet.com> writes:

>
> >>>>> doEvent f usDelay = forkIO $
> >>>>>   threadDelay usDelay
> >>>>>   doEvent f usDelay
> >>>>>   f
>
> There's a missing 'do' here, right?
>

Yes - I said that in a later e-mail but it doesn't fix me violating my own
peeve about non-functional code snippits on -cafe.



> >> Infinite loop?  yes, that is what you wanted.  Memory gobbling?  Why
> >> would you think that?
>
> > Why would I think that ?
>
> > doEvent f usDelay = do forkIO $ threadDelay usDelay
> >                        doEvent f usDelay
> >                        f
>
> Are you sure this isn't interpreted as:
>
>    doEvent f usDelay = do (forkIO $ threadDelay usDelay)
>                           doEvent f usDelay
>                           f
>

The full code I ran and thought we were talking about (more or less) is
inline here.  For clarity - yes I know they are different in that one
executes 'f' before the first sleep and the other does not.

------------- START CODE -----------------
import Control.Concurrent
import Control.Monad (forever)
import System.IO (hFlush, stdout)

doEvent f usDelay = forkIO $ do
   threadDelay usDelay
   doEvent f usDelay
   f


doEvent2 f usDelay = do
        forkIO f
        threadDelay usDelay
        doEvent2 f usDelay

main = do doEvent func 1000000 >> forever (threadDelay maxBound)

main2 = do doEvent2 func 1000000 >> forever (threadDelay maxBound)

func = putStr "." >> hFlush stdout
----------------------- END CODE -------------------



> I.e. just forking off processes that only does a delay, never even
> getting to 'f'?
>

The version you referenced is a little weird but so long as you fix the
indentation it should be fine (drop "forkIO $ f" to the next line).

Cheers,
Thomas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100128/5e92fc92/attachment.html


More information about the Haskell-Cafe mailing list