我正在移植现有的C程序,以使用Emscripten作为在线游戏.
问题是Emscripten希望程序围绕一个被调用60次的单个函数进行组织.这对于主游戏循环是可以的,除了有很多地方代码显示一组选项然后等待按键来选择选项.这表示为使用getch()等待按键的调用层次结构中的深层函数.我发现很难看到如何将其纳入运行然后完成的函数所需的Emscripten样式.
题
当代码调用一个调用了函数的函数时,它调用了一个函数,有一种简单的方法可以保存调用堆栈的整个状态,以便以后可以返回到同一个地方吗?
我试过的
>我目前使用的方法是设置一个全局状态变量来指示我当前的位置,并将堆栈中所有看似重要的东西写入静态变量.然后我从所有功能返回.要重新输入,我使用全局变量来决定调用哪个函数以及从保存的数据重新加载哪些变量.但是,这涉及编写大量额外代码,并且非常容易出错.
>我想知道如何使用线程进行游戏逻辑,只是从GUI线程发送消息,但Emscripten中的当前thread API似乎要求我尝试将所有游戏数据复制到一条消息中,这样就会感觉更多的工作为了一点利益.
> Emscripten支持setjmp / longjmp,但据我了解,这只能完成一半的工作.我想我可以使用longjmp简单地从一个深层函数返回到上层,但我不知道我可以用它来以后再回到原来的位置.
关于如何做到这一点的任何更好的想法?
解决方法 你不能从callstack返回并重新输入它.您只能进行更深入的调用才能仍然能够返回当前状态.函数返回后,相同的堆栈(相同的物理内存位置)将重复用于以下调用,并且值将被覆盖.我不知道Emscripten; getch()包装器可以递归驱动循环直到按下一个键吗?
setjmp / longjmp保存堆栈偏移量,但不保存堆栈上的值.它只对从堆栈d出多个帧有用;它是最接近抛出异常的C.
总结以上是内存溢出为你收集整理的如何保存状态并返回深层C函数?全部内容,希望文章能够帮你解决如何保存状态并返回深层C函数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)