【问题标题】:gen_server:call every X secondsgen_server: 每 X 秒调用一次
【发布时间】:2012-03-14 22:22:17
【问题描述】:

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

每隔 X 秒执行一次 handle_call 的最佳方式是什么?

【问题讨论】:

    标签: timer erlang gen-server


    【解决方案1】:

    “定时器”模块可以解决您的问题。例如,在otp hehaviour implementation module中,

    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}}; 
    

    【讨论】:

    • 我建议使用erlang:send_after/3,它具有完全相同的语义,但更轻量级,并且不需要启动计时器服务器。
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2019-04-08
    • 2017-07-23
    • 2016-10-12
    相关资源
    最近更新 更多