
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 :-) Brian 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 yield forever main = do installHandler realTimeAlarm (Catch alarm) Nothing forever

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)"
Thomas
On Mon, Jan 25, 2010 at 10:25 PM, Brian Denheyer
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 :-)
Brian
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 yield forever
main = do installHandler realTimeAlarm (Catch alarm) Nothing forever
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Brian Denheyer
-
Thomas DuBuisson