packages feed

threadscope-0.1.1: Utils.hs

module Utils ( withBackgroundProcessing ) where

import Graphics.UI.Gtk
import Control.Exception
import Control.Concurrent

-- Causes the gtk main loop to yield to other Haskell threads whenever
-- it is idle.  This should be used only when there is
-- compute-intensive activity going on in other threads.
withBackgroundProcessing :: IO a -> IO a
withBackgroundProcessing f =
  bracket 
    (idleAdd (yield >> return True) priorityDefaultIdle)
    idleRemove
    (\_ -> f)