-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Scalable timer
--
-- Scalable timer functions provided by a timer manager and thread
-- management functions to prevent thread leak by a thread manager.
@package time-manager
@version 0.2.2
module System.TimeManager
-- | A timeout manager
data Manager
-- | An action to be performed on timeout.
type TimeoutAction = IO ()
-- | A handle used by a timeout manager.
data Handle
-- | Creating timeout manager which works every N micro seconds where N is
-- the first argument.
initialize :: Int -> IO Manager
-- | Stopping timeout manager with onTimeout fired.
stopManager :: Manager -> IO ()
-- | Killing timeout manager immediately without firing onTimeout.
killManager :: Manager -> IO ()
-- | Call the inner function with a timeout manager. stopManager is
-- used after that.
withManager :: Int -> (Manager -> IO a) -> IO a
-- | Call the inner function with a timeout manager. killManager is
-- used after that.
withManager' :: Int -> (Manager -> IO a) -> IO a
-- | Registering a timeout action and unregister its handle when the body
-- action is finished. Nothing is returned on timeout.
withHandle :: Manager -> TimeoutAction -> (Handle -> IO a) -> IO (Maybe a)
-- | Registering a timeout action of killing this thread and unregister its
-- handle when the body action is killed or finished.
withHandleKillThread :: Manager -> TimeoutAction -> (Handle -> IO ()) -> IO ()
-- | Setting the state to active. Manager turns active to inactive
-- repeatedly.
tickle :: Handle -> IO ()
-- | Setting the state to paused. Manager does not change the value.
pause :: Handle -> IO ()
-- | Setting the paused state to active. This is an alias to tickle.
resume :: Handle -> IO ()
-- | Registering a timeout action.
register :: Manager -> TimeoutAction -> IO Handle
-- | Registering a timeout action of killing this thread.
-- TimeoutThread is thrown to the thread which called this
-- function on timeout. Catch TimeoutThread if you don't want to
-- leak the asynchronous exception to GHC RTS.
registerKillThread :: Manager -> TimeoutAction -> IO Handle
-- | Removing the Handle from the Manager immediately.
cancel :: Handle -> IO ()
-- | The asynchronous exception thrown if a thread is registered via
-- registerKillThread.
data TimeoutThread
TimeoutThread :: TimeoutThread
instance GHC.Exception.Type.Exception System.TimeManager.TimeoutThread
instance GHC.Show.Show System.TimeManager.TimeoutThread
-- | A thread manager including a time manager. The manager has
-- responsibility to kill managed threads.
module System.ThreadManager
-- | Manager to manage the thread and the timer.
data ThreadManager
-- | Starting a thread manager. Its action is initially set to 'return ()'
-- and should be set by setAction. This allows that the action
-- can include the manager itself.
newThreadManager :: Manager -> IO ThreadManager
-- | Stopping the manager.
--
-- The action is run in the scope of an exception handler that catches
-- all exceptions (including asynchronous ones); this allows the cleanup
-- handler to cleanup in all circumstances. If an exception is caught, it
-- is rethrown after the cleanup is complete.
stopAfter :: ThreadManager -> IO a -> (Maybe SomeException -> IO ()) -> IO a
-- | An exception used internally to kill a managed thread.
data KilledByThreadManager
KilledByThreadManager :: Maybe SomeException -> KilledByThreadManager
-- | Fork a managed thread.
--
-- This guarantees that the thread ID is added to the manager's queue
-- before the thread starts, and is removed again when the thread
-- terminates (normally or abnormally).
forkManaged :: ThreadManager -> String -> IO () -> IO ()
-- | Fork a managed thread with a cleanup function.
forkManagedFinally :: ThreadManager -> String -> IO () -> IO () -> IO ()
-- | Like forkManaged, but run action with exceptions masked
forkManagedUnmask :: ThreadManager -> String -> ((forall x. IO x -> IO x) -> IO ()) -> IO ()
-- | Fork a managed thread with a handle created by a timeout manager.
forkManagedTimeout :: ThreadManager -> String -> (Handle -> IO ()) -> IO ()
-- | Fork a managed thread with a handle created by a timeout manager and
-- with a cleanup function.
forkManagedTimeoutFinally :: ThreadManager -> String -> (Handle -> IO ()) -> IO () -> IO ()
-- | Wait until all managed thread are finished.
waitUntilAllGone :: ThreadManager -> IO ()
-- | A timeout manager
data Manager
withHandle :: ThreadManager -> TimeoutAction -> (Handle -> IO a) -> IO (Maybe a)
-- | A handle used by a timeout manager.
data Handle
-- | Setting the state to active. Manager turns active to inactive
-- repeatedly.
tickle :: Handle -> IO ()
-- | Setting the state to paused. Manager does not change the value.
pause :: Handle -> IO ()
-- | Setting the paused state to active. This is an alias to tickle.
resume :: Handle -> IO ()
instance GHC.Show.Show System.ThreadManager.KilledByThreadManager
instance GHC.Exception.Type.Exception System.ThreadManager.KilledByThreadManager