time_unix.odin 833 B

12345678910111213141516171819202122232425262728293031323334
  1. //+private
  2. //+build linux, darwin, freebsd, openbsd, haiku
  3. package time
  4. import "core:sys/unix"
  5. _IS_SUPPORTED :: true // NOTE: Times on Darwin are UTC.
  6. _now :: proc "contextless" () -> Time {
  7. time_spec_now: unix.timespec
  8. unix.clock_gettime(unix.CLOCK_REALTIME, &time_spec_now)
  9. ns := time_spec_now.tv_sec * 1e9 + time_spec_now.tv_nsec
  10. return Time{_nsec=ns}
  11. }
  12. _sleep :: proc "contextless" (d: Duration) {
  13. ds := duration_seconds(d)
  14. seconds := u32(ds)
  15. nanoseconds := i64((ds - f64(seconds)) * 1e9)
  16. if seconds > 0 { unix.sleep(seconds) }
  17. if nanoseconds > 0 { unix.inline_nanosleep(nanoseconds) }
  18. }
  19. _tick_now :: proc "contextless" () -> Tick {
  20. t: unix.timespec
  21. unix.clock_gettime(unix.CLOCK_MONOTONIC_RAW, &t)
  22. return Tick{_nsec = t.tv_sec*1e9 + t.tv_nsec}
  23. }
  24. _yield :: proc "contextless" () {
  25. unix.sched_yield()
  26. }