-----------------------------------------------------------------------------
module System.CPUTime
- (
+ (
getCPUTime, -- :: IO Integer
- cpuTimePrecision -- :: Integer
+ cpuTimePrecision -- :: Integer
) where
import Prelude
let realToInteger = round . realToFrac :: Real a => a -> Integer
return ((realToInteger u_sec * 1000000 + realToInteger u_usec +
realToInteger s_sec * 1000000 + realToInteger s_usec)
- * 1000000)
+ * 1000000)
type CRUsage = ()
foreign import ccall unsafe getrusage :: CInt -> Ptr CRUsage -> IO CInt
s_ticks <- (#peek struct tms,tms_stime) p_tms :: IO CClock
let realToInteger = round . realToFrac :: Real a => a -> Integer
return (( (realToInteger u_ticks + realToInteger s_ticks) * 1000000000000)
- `div` fromIntegral clockTicks)
+ `div` fromIntegral clockTicks)
type CTms = ()
foreign import ccall unsafe times :: Ptr CTms -> IO CClock
# else
ioException (IOError Nothing UnsupportedOperation
- "getCPUTime"
- "can't get CPU time"
- Nothing)
+ "getCPUTime"
+ "can't get CPU time"
+ Nothing)
# endif
#endif
return (ut + kt)
else return 0
where
- ft2psecs :: Ptr FILETIME -> IO Integer
+ ft2psecs :: Ptr FILETIME -> IO Integer
ft2psecs ft = do
- high <- (#peek FILETIME,dwHighDateTime) ft :: IO CLong
- low <- (#peek FILETIME,dwLowDateTime) ft :: IO CLong
- -- Convert 100-ns units to picosecs (10^-12)
- -- => multiply by 10^5.
+ high <- (#peek FILETIME,dwHighDateTime) ft :: IO Word32
+ low <- (#peek FILETIME,dwLowDateTime) ft :: IO Word32
+ -- Convert 100-ns units to picosecs (10^-12)
+ -- => multiply by 10^5.
return (((fromIntegral high) * (2^32) + (fromIntegral low)) * 100000)
-- ToDo: pin down elapsed times to just the OS thread(s) that
type FILETIME = ()
type HANDLE = ()
-- need proper Haskell names (initial lower-case character)
-foreign import ccall unsafe "GetCurrentProcess" getCurrentProcess :: IO (Ptr HANDLE)
-foreign import ccall unsafe "GetProcessTimes" getProcessTimes :: Ptr HANDLE -> Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> IO CInt
+foreign import stdcall unsafe "GetCurrentProcess" getCurrentProcess :: IO (Ptr HANDLE)
+foreign import stdcall unsafe "GetProcessTimes" getProcessTimes :: Ptr HANDLE -> Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> Ptr FILETIME -> IO CInt
#endif /* not _WIN32 */
#endif /* __GLASGOW_HASKELL__ */