commit 1b25d36
uint
·
2026-08-04 14:04:02 +0000 UTC
parent 491c442
Add maus_sleep
2 files changed,
+17,
-12
+3,
-1
1@@ -171,6 +171,9 @@ void maus_present(Maus* mw);
2 else 0 */
3 int8_t maus_resize(Maus* mw, uint32_t width, uint32_t height);
4
5+/* sleep for `ms` milliseconds */
6+void maus_sleep(uint32_t ms);
7+
8 /* cap framerate to targetted fps */
9 void maus_target_fps(Maus* mw, uint32_t fps);
10
11@@ -178,4 +181,3 @@ void maus_target_fps(Maus* mw, uint32_t fps);
12 void maus_cur_set_mode(Maus* mw, MausCursorState state);
13
14 #endif /* MAUSWIN_H */
15-
+14,
-11
1@@ -64,6 +64,19 @@ void maus_log(FILE* fd, const char* fmt, ...)
2 va_end(ap);
3 }
4
5+void maus_sleep(uint32_t ms)
6+{
7+#if !defined(_WIN32)
8+ struct timespec ts;
9+
10+ ts.tv_sec = ms / 1000;
11+ ts.tv_nsec = (ms % 1000) * 1000000;
12+ nanosleep(&ts, NULL);
13+#else
14+ Sleep((DWORD)ms);
15+#endif
16+}
17+
18 void maus_target_fps(Maus* mw, uint32_t fps)
19 {
20 uint64_t ns_frame;
21@@ -71,10 +84,6 @@ void maus_target_fps(Maus* mw, uint32_t fps)
22 uint64_t elapsed;
23 uint64_t sleep;
24
25- #if !defined(_WIN32)
26- struct timespec ts;
27- #endif
28-
29 if (fps == 0)
30 return;
31
32@@ -85,13 +94,7 @@ void maus_target_fps(Maus* mw, uint32_t fps)
33 /* if early finish, sleep for the remaining time balance */
34 if (elapsed < ns_frame) {
35 sleep = ns_frame - elapsed;
36- #if !defined(_WIN32)
37- ts.tv_sec = sleep / 1000000000;
38- ts.tv_nsec = sleep % 1000000000;
39- nanosleep(&ts, NULL);
40- #else
41- Sleep((DWORD)((sleep + 999999) / 1000000));
42- #endif
43+ maus_sleep((uint32_t)((sleep + 999999) / 1000000));
44 }
45
46 mw->frame_time_last = maus_get_time_ns();