summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
}