1313
1414#ifdef __EMSCRIPTEN__
1515#include < emscripten/emscripten.h>
16+ #include < emscripten/threading.h>
1617#endif // __EMSCRIPTEN__
1718
1819#ifdef _WIN32
@@ -267,7 +268,10 @@ void sleep_ms(int ms, const char *reason) {
267268#elif defined(HAVE_LIBNX)
268269 svcSleepThread (ms * 1000000 );
269270#elif defined(__EMSCRIPTEN__)
270- emscripten_sleep (ms);
271+ if (emscripten_is_main_browser_thread ())
272+ emscripten_sleep (ms);
273+ else
274+ emscripten_thread_sleep (ms);
271275#else
272276 usleep (ms * 1000 );
273277#endif
@@ -285,7 +289,10 @@ void sleep_us(int us, const char *reason) {
285289#elif defined(HAVE_LIBNX)
286290 svcSleepThread (us * 1000 );
287291#elif defined(__EMSCRIPTEN__)
288- emscripten_sleep (us / 1000 );
292+ if (emscripten_is_main_browser_thread ())
293+ emscripten_sleep (us / 1000 );
294+ else
295+ emscripten_thread_sleep (us / 1000 );
289296#else
290297 usleep (us);
291298#endif
@@ -342,7 +349,10 @@ void sleep_precise(double seconds, const char *reason) {
342349#elif defined(HAVE_LIBNX)
343350 svcSleepThread ((int64_t )(seconds * 1000000000.0 ));
344351#elif defined(__EMSCRIPTEN__)
345- emscripten_sleep (seconds * 1000.0 );
352+ if (emscripten_is_main_browser_thread ())
353+ emscripten_sleep ((unsigned int )(seconds * 1000.0 ));
354+ else
355+ emscripten_thread_sleep (seconds * 1000.0 );
346356#else
347357 usleep (seconds * 1000000.0 );
348358#endif
0 commit comments