-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtime.h
50 lines (40 loc) · 1.28 KB
/
time.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#pragma once
#include <stdbool.h>
#include <time.h> // IWYU pragma: export
enum time_precision {
time_msec = 1,
time_sec = 1000 * time_msec,
time_min = 60 * time_sec,
time_hour = 60 * time_min,
};
struct moment {
unsigned int hours;
unsigned int mins;
unsigned int secs;
unsigned int msecs;
};
struct duration {
unsigned long msecs;
};
struct ticker {
struct duration elapsed;
};
struct timer {
struct duration duration;
struct ticker ticker;
};
// - timer
extern void tick_timer(struct timer* timer, const struct duration delta);
extern void reset_timer(struct timer* timer);
extern bool timer_expires(const struct timer* timer);
extern float get_elapsed_time_ratio(const struct timer* timer);
extern struct duration get_remaining_time(const struct timer* timer);
extern struct duration get_overflow_time(const struct timer* timer);
// - sleep
extern void sleep_for(const struct duration duration);
// - moment
extern struct moment moment_from_duration(const struct duration duration, enum time_precision precision);
// - duration
extern struct duration duration_from_moment(const struct moment moment);
extern struct duration duration_diff(const struct duration duration, const struct duration other);
extern struct duration get_monotonic_time(void);