From 26a1ab291a6fe16db7d1b35d2f93b62a96d71c85 Mon Sep 17 00:00:00 2001 From: onelin Date: Wed, 12 Mar 2025 11:56:37 +0100 Subject: Update sleep function --- src/core/include/engine/engine.h | 2 +- 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 #include #include #include @@ -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 } -- cgit v1.3