背景
我正在移植现有的C程序,以使用Emscripten作为在线游戏.
问题是Emscripten希望程序围绕一个被调用60次的单个函数进行组织.这对于主游戏循环是可以的,除了有很多地方代码显示一组选项然后等待按键来选择选项.这表示为使用getch()等待按键的调用层次结构中的深层函数.我发现很难看到如何将其纳入运行然后完成的函数所需的Emscripten样式.
题
当代码调用一个调用了函数的函数时,它调用了一个函数,有一种简单的方法可以保存调用堆栈的整个状态,以便以后可以返回到同一个地方吗?
我试过的
>我目前使用的方法是设置一个全局状态变量来指示我当前的位置,并将堆栈中所有看似重要的东西写入静态变量.然后我从所有功能返回.要重新输入,我使用全局变量来决定调用哪个函数以及从保存的数据重新加载哪些变量.但是,这涉及编写大量额外代码,并且非常容易出错.
>我想知道如何使用线程进行游戏逻辑,只是从GUI线程发送消息,但Emscripten中的当前thread API似乎要求我尝试将所有游戏数据复制到一条消息中,这样就会感觉更多的工作为了一点利益.
> Emscripten支持setjmp / longjmp,但据我了解,这只能完成一半的工作.我想我可以使用longjmp简单地从一个深层函数返回到上层,但我不知道我可以用它来以后再回到原来的位置.
关于如何做到这一点的任何更好的想法?