每隔X秒调用gen_server:call

3

gen_server的状态是一个列表,应该每X秒处理一次。因此,我需要每隔X秒执行handle_call({process},State)。

有什么最好的方法可以每隔X秒执行handle_call?

1个回答

2
“定时器”模块可以解决您的问题。例如,在otp行为实现模块中,
init([]) ->
    timer:send_after(1000,self(),{create_log}), %<====== create an event after 1000ms
    {ok, #state{id=1}}.

handle_info({create_log},#state{id=ID})-> %<=========handle the timer event
    %io:format("handle info~n",[]),
    New_id = ID + 1,
    ls117_single_process_log:error("test log ~p~n",[New_id]),
    timer:send_after(1000,self(),{create_log}),  %<========restart timer
    {noreply,#state{id=New_id}}; 

5
我建议使用 erlang:send_after/3,它的语义与原来相同,但更加轻量级,且不需要启动计时器服务器。 - Hynek -Pichi- Vychodil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接