summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-03-12 10:56:37 +0000
committeronelin <oscar@nelin.dk>2025-03-12 10:56:37 +0000
commit26a1ab291a6fe16db7d1b35d2f93b62a96d71c85 (patch)
tree33d9c70584dcaa9a8f0865fd6b63f58b2cce7053
parentc70c3b5c57b2329f64fbf172dbebd4a9f6de9060 (diff)
Update sleep function
-rw-r--r--src/core/include/engine/engine.h2
-rw-r--r--src/core/src/loop.c15
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
}