[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