我有一个MAIN进程,它产生gen_fsm行为的实现,但是这个MAIN进程不是supervisor行为的实现,它只是另一个模块。 假设gen_fsm的实现称为GAME_ROOM。 我的情况是这样的:
问题是:我需要在新的状态下恢复所有被击落的GAME_ROOM状态。 我的问题是:如何使用gen_fsm的终止函数将gen_fsm的最新状态传递给我的MAIN进程,所以当我重新生成一个新的GAME_ROOM时,我可以传递那些状态?
答案 0 :(得分:1)
阅读process_flag({trap_exit,true})并处理信息'EXIT'。
答案 1 :(得分:1)
一种简单的方法是让GAME_ROOM terminate/3
向MAIN发送包含必要状态信息的消息。为了实现这个目的,GAME_ROOM必须知道MAIN的pid(简单),你必须确定terminate/3
真的被称为。{/ p>
答案 2 :(得分:0)
首先,我建议您在实施中考虑使用主管,以避免重新发明轮子。
可能是在MAIN中创建一个ETS表,因此您可以存储gen_fsms中的数据,这些数据可以在进程崩溃中存活。
答案 3 :(得分:0)
我的信念是,如果GAME_ROOM由于错误而退出,则无需保存(您如何知道您的状态是有效的,否则您会将错误记录在GAME_ROOM中)。