* fix #21045 getTime with vmopsDanger is broken; alternative to #21054 * typo
This commit is contained in:
parent
7a18c1ef44
commit
07be1791ba
5 changed files with 51 additions and 22 deletions
|
|
@ -953,27 +953,33 @@ proc toWinTime*(t: Time): int64 =
|
|||
## since `1601-01-01T00:00:00Z`).
|
||||
result = t.seconds * rateDiff + epochDiff + t.nanosecond div 100
|
||||
|
||||
proc getTimeImpl(typ: typedesc[Time]): Time =
|
||||
discard "implemented in the vm"
|
||||
|
||||
proc getTime*(): Time {.tags: [TimeEffect], benign.} =
|
||||
## Gets the current time as a `Time` with up to nanosecond resolution.
|
||||
when defined(js):
|
||||
let millis = newDate().getTime()
|
||||
let seconds = convert(Milliseconds, Seconds, millis)
|
||||
let nanos = convert(Milliseconds, Nanoseconds,
|
||||
millis mod convert(Seconds, Milliseconds, 1).int)
|
||||
result = initTime(seconds, nanos)
|
||||
elif defined(macosx):
|
||||
var a {.noinit.}: Timeval
|
||||
gettimeofday(a)
|
||||
result = initTime(a.tv_sec.int64,
|
||||
convert(Microseconds, Nanoseconds, a.tv_usec.int))
|
||||
elif defined(posix):
|
||||
var ts {.noinit.}: Timespec
|
||||
discard clock_gettime(CLOCK_REALTIME, ts)
|
||||
result = initTime(ts.tv_sec.int64, ts.tv_nsec.int)
|
||||
elif defined(windows):
|
||||
var f {.noinit.}: FILETIME
|
||||
getSystemTimeAsFileTime(f)
|
||||
result = fromWinTime(rdFileTime(f))
|
||||
when nimvm:
|
||||
result = getTimeImpl(Time)
|
||||
else:
|
||||
when defined(js):
|
||||
let millis = newDate().getTime()
|
||||
let seconds = convert(Milliseconds, Seconds, millis)
|
||||
let nanos = convert(Milliseconds, Nanoseconds,
|
||||
millis mod convert(Seconds, Milliseconds, 1).int)
|
||||
result = initTime(seconds, nanos)
|
||||
elif defined(macosx):
|
||||
var a {.noinit.}: Timeval
|
||||
gettimeofday(a)
|
||||
result = initTime(a.tv_sec.int64,
|
||||
convert(Microseconds, Nanoseconds, a.tv_usec.int))
|
||||
elif defined(posix):
|
||||
var ts {.noinit.}: Timespec
|
||||
discard clock_gettime(CLOCK_REALTIME, ts)
|
||||
result = initTime(ts.tv_sec.int64, ts.tv_nsec.int)
|
||||
elif defined(windows):
|
||||
var f {.noinit.}: FILETIME
|
||||
getSystemTimeAsFileTime(f)
|
||||
result = fromWinTime(rdFileTime(f))
|
||||
|
||||
proc `-`*(a, b: Time): Duration {.operator, extern: "ntDiffTime".} =
|
||||
## Computes the duration between two points in time.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue