[std/times]getTime now uses high resolution API on windows (#17901)
This commit is contained in:
parent
63456c6d7f
commit
496bd790e1
2 changed files with 6 additions and 2 deletions
|
|
@ -880,6 +880,7 @@ since((1, 1)):
|
||||||
export fromUnixFloat
|
export fromUnixFloat
|
||||||
export toUnixFloat
|
export toUnixFloat
|
||||||
|
|
||||||
|
|
||||||
proc fromWinTime*(win: int64): Time =
|
proc fromWinTime*(win: int64): Time =
|
||||||
## Convert a Windows file time (100-nanosecond intervals since
|
## Convert a Windows file time (100-nanosecond intervals since
|
||||||
## `1601-01-01T00:00:00Z`) to a `Time`.
|
## `1601-01-01T00:00:00Z`) to a `Time`.
|
||||||
|
|
@ -912,7 +913,7 @@ proc getTime*(): Time {.tags: [TimeEffect], benign.} =
|
||||||
result = initTime(ts.tv_sec.int64, ts.tv_nsec.int)
|
result = initTime(ts.tv_sec.int64, ts.tv_nsec.int)
|
||||||
elif defined(windows):
|
elif defined(windows):
|
||||||
var f {.noinit.}: FILETIME
|
var f {.noinit.}: FILETIME
|
||||||
getSystemTimeAsFileTime(f)
|
getSystemTimePreciseAsFileTime(f)
|
||||||
result = fromWinTime(rdFileTime(f))
|
result = fromWinTime(rdFileTime(f))
|
||||||
|
|
||||||
proc `-`*(a, b: Time): Duration {.operator, extern: "ntDiffTime".} =
|
proc `-`*(a, b: Time): Duration {.operator, extern: "ntDiffTime".} =
|
||||||
|
|
@ -2595,7 +2596,7 @@ proc epochTime*(): float {.tags: [TimeEffect].} =
|
||||||
toBiggestFloat(ts.tv_nsec.int64) / 1_000_000_000
|
toBiggestFloat(ts.tv_nsec.int64) / 1_000_000_000
|
||||||
elif defined(windows):
|
elif defined(windows):
|
||||||
var f {.noinit.}: winlean.FILETIME
|
var f {.noinit.}: winlean.FILETIME
|
||||||
getSystemTimeAsFileTime(f)
|
getSystemTimePreciseAsFileTime(f)
|
||||||
var i64 = rdFileTime(f) - epochDiff
|
var i64 = rdFileTime(f) - epochDiff
|
||||||
var secs = i64 div rateDiff
|
var secs = i64 div rateDiff
|
||||||
var subsecs = i64 mod rateDiff
|
var subsecs = i64 mod rateDiff
|
||||||
|
|
|
||||||
|
|
@ -928,6 +928,9 @@ proc getProcessTimes*(hProcess: Handle; lpCreationTime, lpExitTime,
|
||||||
lpKernelTime, lpUserTime: var FILETIME): WINBOOL {.stdcall,
|
lpKernelTime, lpUserTime: var FILETIME): WINBOOL {.stdcall,
|
||||||
dynlib: "kernel32", importc: "GetProcessTimes".}
|
dynlib: "kernel32", importc: "GetProcessTimes".}
|
||||||
|
|
||||||
|
proc getSystemTimePreciseAsFileTime*(lpSystemTimeAsFileTime: var FILETIME) {.
|
||||||
|
importc: "GetSystemTimePreciseAsFileTime", dynlib: "kernel32", stdcall, sideEffect.}
|
||||||
|
|
||||||
type inet_ntop_proc = proc(family: cint, paddr: pointer, pStringBuffer: cstring,
|
type inet_ntop_proc = proc(family: cint, paddr: pointer, pStringBuffer: cstring,
|
||||||
stringBufSize: int32): cstring {.gcsafe, stdcall, tags: [].}
|
stringBufSize: int32): cstring {.gcsafe, stdcall, tags: [].}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue