如何保存状态并返回深层C函数?

前端之家收集整理的这篇文章主要介绍了如何保存状态并返回深层C函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
背景

我正在移植现有的C程序,以使用Emscripten作为在线游戏.

问题是Emscripten希望程序围绕一个被调用60次的单个函数进行组织.这对于主游戏循环是可以的,除了有很多地方代码显示一组选项然后等待按键来选择选项.这表示为使用getch()等待按键的调用层次结构中的深层函数.我发现很难看到如何将其纳入运行然后完成的函数所需的Emscripten样式.

代码调用一个调用函数函数时,它调用了一个函数,有一种简单的方法可以保存调用堆栈的整个状态,以便以后可以返回到同一个地方吗?

我试过的

>我目前使用的方法是设置一个全局状态变量来指示我当前的位置,并将堆栈中所有看似重要的东西写入静态变量.然后我从所有功能返回.要重新输入,我使用全局变量来决定调用哪个函数以及从保存的数据重新加载哪些变量.但是,这涉及编写大量额外代码,并且非常容易出错.
>我想知道如何使用线程进行游戏逻辑,只是从GUI线程发送消息,但Emscripten中的当前thread API似乎要求我尝试将所有游戏数据复制到一条消息中,这样就会感觉更多的工作为了一点利益.
> Emscripten支持setjmp / longjmp,但据我了解,这只能完成一半的工作.我想我可以使用longjmp简单地从一个深层函数返回到上层,但我不知道我可以用它来以后再回到原来的位置.

关于如何做到这一点的任何更好的想法?

解决方法

你不能从callstack返回并重新输入它.您只能进行更深入的调用才能仍然能够返回当前状态.函数返回后,相同的堆栈(相同的物理内存位置)将重复用于以下调用,并且值将被覆盖.

我不知道Emscripten; getch()包装器可以递归驱动循环直到按下一个键吗?

setjmp / longjmp保存堆栈偏移量,但不保存堆栈上的值.它只对从堆栈弹出多个帧有用;它是最接近抛出异常的C.

猜你在找的C&C++相关文章