Emscripten_set_main_loop失效:usleep未定义且出现除零错误
问题解决方法
核心问题分析
你自定义的emscripten_set_main_loop宏完全不符合Emscripten的规范,直接导致两个致命错误:
- 传入
fps=0时触发1000000/0的除零异常 - Web浏览器环境不支持POSIX系统的
usleep函数,因此报未定义错误
具体修复步骤
- 立刻删除你自己写的这个宏定义:
#define emscripten_set_main_loop(func,fps,simulateInfiniteLoop) while (1) { func(); usleep(1000000/fps); } - 使用Emscripten SDK内置的官方
emscripten_set_main_loop函数,它会自动适配浏览器事件循环,无需手动写死循环或sleep逻辑:// 示例:以60fps运行主循环,启用无限循环模拟 emscripten_set_main_loop(loop, 60, 1); - 若要适配浏览器刷新率,直接将fps参数设为0即可,Emscripten会自动对齐
requestAnimationFrame的频率,不会出现除零问题:emscripten_set_main_loop(loop, 0, 1); - 如果一定要手动实现循环逻辑,不要用
usleep,改用Emscripten提供的emscripten_sleep函数,或者基于requestAnimationFrame编写异步循环(更推荐用官方主循环API,省心且兼容性更好)
内容的提问来源于stack exchange,提问作者Adib0y360
相关产品推荐
相关产品推荐

