[email protected]
[Top] [All Lists]

Re: [Haskell-cafe] scheduling an alarm

Subject: Re: [Haskell-cafe] scheduling an alarm
From: Thomas DuBuisson
Date: Mon, 25 Jan 2010 23:19:53 -0800
1) Don't use System.Posix.Signals
It isn't necessary and makes your code less portable

2) The POSIX SIGALRM is used/caught by the RTS and that is why you are seeing strange behavior.

3) Consider using Haskell exceptions from Control.Concurrent (throwTo).
Not sure what you want to do but you can always "myThreadId >>= \tid -> forkIO $ threadDelay someDelayTime >> (throwTo tid someExceptionVal)"


On Mon, Jan 25, 2010 at 10:25 PM, Brian Denheyer <[email protected]> wrote:
I cobbled the following together from bits and pieces I found on
mailing lists.  Seems straightforward, but the code I've included
just sits there.

The awaitSignal seems to be causing a problem, in that if I remove it
(and don't call forever recursively) then I get my ALARM 5 sec later.

Otherwise nothing.  The problem is that if I don't include awaitSignal,
then, of course, forever is called just as fast as the CPU will go :-)


import System.Posix.Signals
import System.IO
import Control.Concurrent

alarm =
   do putStrLn "ALARM"
      hFlush stdout
      return ()

forever =
   do putStrLn "foo"
      scheduleAlarm 5
      awaitSignal Nothing

main =
   do installHandler realTimeAlarm (Catch alarm) Nothing

Haskell-Cafe mailing list
[email protected]

Haskell-Cafe mailing list
[email protected]
<Prev in Thread] Current Thread [Next in Thread>