我正在遵循执行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'}}