{-# language CPP, ForeignFunctionInterface #-}

module Clocked.WinTimePeriod (withTimePeriod) where

#ifdef mingw32_HOST_OS


import Control.Monad.CatchIO
import Control.Monad.IO.Class

import Foreign.C.Types

foreign import ccall c_timeBeginPeriod :: CUInt -> IO ()
foreign import ccall c_timeEndPeriod :: CUInt -> IO ()

withTimePeriod :: MonadCatchIO m => CUInt -> m a -> m a
withTimePeriod n cmd =
    bracket (liftIO $ c_timeBeginPeriod n) (const $ liftIO $ c_timeEndPeriod n) (const $ cmd)

    
#else


import Control.Monad.CatchIO

import Foreign.C.Types

withTimePeriod :: MonadCatchIO m => CUInt -> m a -> m a
withTimePeriod _ = id


#endif