[Haskell-cafe] Re: Waiting for thread to finish

Jules Bean jules at jellybean.co.uk
Thu Dec 6 11:28:48 EST 2007


ChrisK wrote:
> A safer gimmick...
> 
> Ben Franksen wrote:
>> tickWhileDoing :: String -> IO a -> IO a
>> tickWhileDoing msg act = do
>>   hPutStr stderr msg >> hPutChar stderr ' ' >> hFlush stderr
>>   start_time <- getCPUTime
>>   tickerId <- forkIO ticker
> ... an async exception here will leave the ticker runnning....
>>   res <- act `finally` killThread tickerId
> 
> The best way to make this safe that I know of is:
> 
>>   res <- block $ do
>>     tickerId <- forkIO ticker
>>     unblock act `finally` killThread tickerId


...but with a change that Simon M just checked in to GHC head, this will 
now spawn 'ticker' in blocked state, so you won't be able to kill it. 
You would therefore want unblock $ forkIO ticker or forkIO $ unblock ticker

I'm not sure if there is a strong reason to prefer one over the other.

Jules



More information about the Haskell-Cafe mailing list