1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package time
- import "core:os";
- // NOTE(Jeroen): The times returned are in UTC
- IS_SUPPORTED :: true;
- now :: proc() -> Time {
- time_spec_now := os.clock_gettime(os.CLOCK_REALTIME);
- ns := time_spec_now.tv_sec * 1e9 + time_spec_now.tv_nsec;
- return Time{_nsec=ns};
- }
- boot_time :: proc() -> Time {
- ts_now := os.clock_gettime(os.CLOCK_REALTIME);
- ts_boottime := os.clock_gettime(os.CLOCK_BOOTTIME);
- ns := (ts_now.tv_sec - ts_boottime.tv_sec) * 1e9 + ts_now.tv_nsec - ts_boottime.tv_nsec;
- return Time{_nsec=ns};
- }
- seconds_since_boot :: proc() -> f64 {
- ts_boottime := os.clock_gettime(os.CLOCK_BOOTTIME);
- return f64(ts_boottime.tv_sec) + f64(ts_boottime.tv_nsec) / 1e9;
- }
- sleep :: proc(d: Duration) {
- ds := duration_seconds(d);
- seconds := u64(ds);
- nanoseconds := i64((ds - f64(seconds)) * 1e9);
- if seconds > 0 do os.sleep(seconds);
- if nanoseconds > 0 do os.nanosleep(nanoseconds);
- }
- nanosleep :: proc(d: Duration) {
- // NOTE(Jeroen): os.nanosleep returns -1 on failure, 0 on success
- // duration needs to be [0, 999999999] nanoseconds.
- os.nanosleep(i64(d));
- }
|