sched.odin 607 B

1234567891011121314151617181920212223242526272829303132333435
  1. package odin_libc
  2. import "core:time"
  3. import "core:thread"
  4. Clock :: enum i32 {
  5. Monotonic = 1,
  6. }
  7. Time_Spec :: struct {
  8. tv_sec: i64,
  9. tv_nsec: i64,
  10. }
  11. @(require, linkage="strong", link_name="clock_gettime")
  12. clock_gettine :: proc "c" (clockid: Clock, tp: ^Time_Spec) -> i32 {
  13. switch clockid {
  14. case .Monotonic:
  15. tick := time.tick_now()
  16. tp.tv_sec = tick._nsec/1e9
  17. tp.tv_nsec = tick._nsec%1e9/1000
  18. return 0
  19. case: return -1
  20. }
  21. }
  22. @(require, linkage="strong", link_name="sched_yield")
  23. sched_yield :: proc "c" () -> i32 {
  24. when thread.IS_SUPPORTED {
  25. context = g_ctx
  26. thread.yield()
  27. }
  28. return 0
  29. }