{-# LANGUAGE NoImplicitPrelude #-}
module GHC.Internal.Event.Windows.Thread (
ensureIOManagerIsRunning,
interruptIOManager,
threadDelay,
registerDelay,
) where
import GHC.Internal.Conc.Sync
import GHC.Internal.Base
import GHC.Internal.Event.Windows
import GHC.Internal.IO
import GHC.Internal.MVar
ensureIOManagerIsRunning :: IO ()
ensureIOManagerIsRunning :: IO ()
ensureIOManagerIsRunning = IO ()
wakeupIOManager
interruptIOManager :: IO ()
interruptIOManager :: IO ()
interruptIOManager = IO ()
interruptSystemManager
threadDelay :: Int -> IO ()
threadDelay :: Int -> IO ()
threadDelay Int
usecs = IO () -> IO ()
forall a. IO a -> IO a
mask_ (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
m <- IO (MVar ())
forall a. IO (MVar a)
newEmptyMVar
mgr <- getSystemManager
reg <- registerTimeout mgr usecs $ putMVar m () >> return ()
readMVar m `onException` unregisterTimeout mgr reg
registerDelay :: Int -> IO (TVar Bool)
registerDelay :: Int -> IO (TVar Bool)
registerDelay Int
usecs = do
t <- Bool -> IO (TVar Bool)
forall a. a -> IO (TVar a)
newTVarIO Bool
False
mgr <- getSystemManager
_ <- registerTimeout mgr usecs $ atomically $ writeTVar t True
return t