直接返回呼叫者的呼叫者并在下次呼叫时恢复状态

时间:2014-02-27 14:01:13

标签: c# lua continuations nlua

我正在构建一个系统插件。我的插件的update()方法偶尔被系统调用。

在我的插件的update()方法中,我正在修改系统状态,但系统状态在系统有机会之前不会更新(这发生在{{1}的调用之间方法)。

所以每当我进行系统更新方法时,我都必须从update一直返回,让它返回,然后重新输入,然后我将不得不尝试回来到了我的位置。我一直在考虑一种更聪明的方法,即通过保存调用框架等。然后在返回时加载该调用帧。

但是我没有开始自己实现这个,而是在考虑是否已经有办法做到这一点。我正在编写的插件是在Lua中,通过用于C#的NLua库。

如果需要,我可以访问C#环境!

我有一个想法,我需要类似延续的东西吗?

我喜欢的例子;

update()

2 个答案:

答案 0 :(得分:1)

我确实在寻找协同程序,它们似乎完全符合我的要求。 我最终将update() can包装在一个方法中,以作为协程运行实际更新函数,并使用coroutine.yield()

包装所有系统状态更改方法

答案 1 :(得分:0)

虽然协程路由非常好,但另一个选项可能是,取决于限制(例如,如果你可以将obj传递给脚本)for stack&寄存器放在一个作为调用的一部分给出的结构中:

 struct StackAndRegisters { ... }
 StackAndRegisters sar; // outside update loop

 // then at every call: 
 update(sar) -> -> ... --> helper_function(sar) --> system_state_modifier(sar)
 // system_state_modifier modifies sar