在Erlang Hot Code Reload功能中触发更新消息

贝科维奇·阿德里安

我正在按照LYAE的指南尝试erlang的热代码功能,但我不明白如何update触发消息。

我有一个运行可升级方法的模块:

模组

-module(upgrade).
-export([main/1,upgrade/1,init/1,init_link/1]).
-record(state,{ version=0,comments=""}).


init(State)->
    spawn(?MODULE,main,[State]).
main(State)->
    receive 
        update->
            NewState=?MODULE:upgrade(State),
            if NewState#state.version>3 -> exit("Max Version Reached") end,

            ?MODULE:main(NewState);
        SomeMessage->
            main(State)
    end.



upgrade(State=#state{version=Version,comments=Comments})->
    Comm=case Version rem 2 of
            0 -> "Even version";
            _ -> "Uneven version"
         end,
    #state{version=Version+1,comments=Comm}.

贝壳

>c(upgrade).
>rr(upgrade,state).
>U=upgrade:init(#state{version=0,comments="initial"}).
>Monitor=monitor(process,U).
> ......to something to trigger the update message
> flush().  % see the exit message reason

我不明白如何才能执行热代码重新加载以触发update消息。我想要flush从我的main方法中获取退出原因

乐高积木

该过程希望获得原子update作为消息。由于您的变量中包含进程的pid,因此U可以发送如下消息:

U ! update.

请注意,字符串Even versionUneven version仅保持状态,从不打印,因此您不会看到它们。发送update四次并调用后,您将看到的唯一消息是退出消息flush()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章