diff options
| author | onelin <oscar@nelin.dk> | 2025-03-12 10:56:37 +0000 |
|---|---|---|
| committer | onelin <oscar@nelin.dk> | 2025-03-12 10:56:37 +0000 |
| commit | 26a1ab291a6fe16db7d1b35d2f93b62a96d71c85 (patch) | |
| tree | 33d9c70584dcaa9a8f0865fd6b63f58b2cce7053 /src/core | |
| parent | c70c3b5c57b2329f64fbf172dbebd4a9f6de9060 (diff) | |
Update sleep function
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/include/engine/engine.h | 2 | ||||
| -rw-r--r-- | src/core/src/loop.c | 15 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/core/include/engine/engine.h b/src/core/include/engine/engine.h index ec716be..0d5d2bc 100644 --- a/src/core/include/engine/engine.h +++ b/src/core/include/engine/engine.h @@ -46,7 +46,7 @@ void render_adjust_zoom(f32 diff); void render_add_unit(RenderUnit* u); /* move this */ -void delay(uint32_t ms); +void delay(uint64_t ms); // file operations isize f_get_sz(FILE* f); diff --git a/src/core/src/loop.c b/src/core/src/loop.c index 567020a..95a405e 100644 --- a/src/core/src/loop.c +++ b/src/core/src/loop.c @@ -1,3 +1,4 @@ +#include <time.h> #include <errno.h> #include <stdlib.h> #include <string.h> @@ -50,12 +51,22 @@ i32 nproc(void) { return get_nprocs(); } -void delay( uint32_t ms ) +void delay( uint64_t ms ) { #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) Sleep( ms ); #else - usleep( ms * 1000 ); + struct timespec ts = { + .tv_sec = ms / 1000, + .tv_nsec = ms * 1000000 + }; + struct timespec rem = {0,0}; + while(nanosleep(&ts, &rem)) { + WARN("nanosleep didn't sleep full duration!"); + ts = rem; + rem = (struct timespec){0,0}; + } + //usleep( ms * 1000 ); #endif } |
