gen_server因以下原因终止:错误的返回值

时间:2018-08-23 10:57:49

标签: erlang erlang-shell

我正在遵循执行Hynek -Pichi- Vychodil here给出的定期任务的示例。

我遇到了一个问题,因为我想将一些参数也传递给start_link函数,该函数将在我的do_task()函数中使用。但是给定here,start_link / 4需要返回{ok,Pid},在我的情况下,它返回{ok,{Ref,Arguments}},因此失败了。

我该如何解决。这是我的代码:

start_link(Period,SERVER,Args) when Period > 0, is_integer(Period) ->
    gen_server:start_link({local, SERVER}, ?MODULE, [Period,Args], []).


init([Period,Args]) ->
    StartT = erlang:monotonic_time(millisecond),
    self() ! tick,
    {ok, {StartT, Period,Args}}.

handle_call(_Request, _From, State) ->
    Reply = ok,
    {reply, Reply, State}.

handle_cast(_Msg, State) ->
    {noreply, State}.


handle_info(tick, {StartT, Period,Args} = S) ->
    Next = Period - (erlang:monotonic_time(millisecond)-StartT) rem Period,
    _Timer = erlang:send_after(Next, self(), tick),

    do_task(Args),
    {ok, S};

handle_info(_Info, State) ->
    {noreply, State}.

这里 周期是-> 30000 并且参数为-> {A,[a,b],'something'}

这是崩溃日志

[error] gen_server '95ef60ae-b2fa-491a-821d-ffae85cc57f6' terminated with reason: bad return value: {ok,{-576460723187,30000,{A,[a,b],'something'}}

1 个答案:

答案 0 :(得分:0)