reorg
This commit is contained in:
parent
9356f11c60
commit
e84b78f40c
2 changed files with 15 additions and 16 deletions
|
@ -7,11 +7,7 @@
|
||||||
|
|
||||||
module Utility.ThreadLock where
|
module Utility.ThreadLock where
|
||||||
|
|
||||||
import Common
|
|
||||||
|
|
||||||
import System.Posix.Terminal
|
|
||||||
import Control.Concurrent.MVar
|
import Control.Concurrent.MVar
|
||||||
import System.Posix.Signals
|
|
||||||
|
|
||||||
type Lock = MVar ()
|
type Lock = MVar ()
|
||||||
|
|
||||||
|
@ -21,15 +17,3 @@ newLock = newMVar ()
|
||||||
{- Runs an action with a lock held, so only one thread at a time can run it. -}
|
{- Runs an action with a lock held, so only one thread at a time can run it. -}
|
||||||
withLock :: Lock -> IO a -> IO a
|
withLock :: Lock -> IO a -> IO a
|
||||||
withLock lock = withMVar lock . const
|
withLock lock = withMVar lock . const
|
||||||
|
|
||||||
{- Pauses the main thread, letting children run until program termination. -}
|
|
||||||
waitForTermination :: IO ()
|
|
||||||
waitForTermination = do
|
|
||||||
lock <- newEmptyMVar
|
|
||||||
check softwareTermination lock
|
|
||||||
whenM (queryTerminal stdInput) $
|
|
||||||
check keyboardSignal lock
|
|
||||||
takeMVar lock
|
|
||||||
where
|
|
||||||
check sig lock = void $
|
|
||||||
installHandler sig (CatchOnce $ putMVar lock ()) Nothing
|
|
||||||
|
|
|
@ -9,7 +9,10 @@
|
||||||
module Utility.ThreadScheduler where
|
module Utility.ThreadScheduler where
|
||||||
|
|
||||||
import Common
|
import Common
|
||||||
|
|
||||||
import Control.Concurrent
|
import Control.Concurrent
|
||||||
|
import System.Posix.Terminal
|
||||||
|
import System.Posix.Signals
|
||||||
|
|
||||||
newtype Seconds = Seconds { fromSeconds :: Int }
|
newtype Seconds = Seconds { fromSeconds :: Int }
|
||||||
deriving (Eq, Ord, Show)
|
deriving (Eq, Ord, Show)
|
||||||
|
@ -40,3 +43,15 @@ unboundDelay time = do
|
||||||
let maxWait = min time $ toInteger (maxBound :: Int)
|
let maxWait = min time $ toInteger (maxBound :: Int)
|
||||||
threadDelay $ fromInteger maxWait
|
threadDelay $ fromInteger maxWait
|
||||||
when (maxWait /= time) $ unboundDelay (time - maxWait)
|
when (maxWait /= time) $ unboundDelay (time - maxWait)
|
||||||
|
|
||||||
|
{- Pauses the main thread, letting children run until program termination. -}
|
||||||
|
waitForTermination :: IO ()
|
||||||
|
waitForTermination = do
|
||||||
|
lock <- newEmptyMVar
|
||||||
|
check softwareTermination lock
|
||||||
|
whenM (queryTerminal stdInput) $
|
||||||
|
check keyboardSignal lock
|
||||||
|
takeMVar lock
|
||||||
|
where
|
||||||
|
check sig lock = void $
|
||||||
|
installHandler sig (CatchOnce $ putMVar lock ()) Nothing
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue