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
|
||||
|
||||
import Common
|
||||
|
||||
import System.Posix.Terminal
|
||||
import Control.Concurrent.MVar
|
||||
import System.Posix.Signals
|
||||
|
||||
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. -}
|
||||
withLock :: Lock -> IO a -> IO a
|
||||
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
|
||||
|
||||
import Common
|
||||
|
||||
import Control.Concurrent
|
||||
import System.Posix.Terminal
|
||||
import System.Posix.Signals
|
||||
|
||||
newtype Seconds = Seconds { fromSeconds :: Int }
|
||||
deriving (Eq, Ord, Show)
|
||||
|
@ -40,3 +43,15 @@ unboundDelay time = do
|
|||
let maxWait = min time $ toInteger (maxBound :: Int)
|
||||
threadDelay $ fromInteger 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
Reference in a new issue