相关疑难解决方法(0)

在Erlang中定期做某事的最佳方法是什么?

我有一个过程需要每十五秒做一些工作.我现在这样做:

    -behavior(gen_server).

    interval_milliseconds ()-> 15000.
    init()->
        {ok, 
         _State = FascinatingStateData,
         _TimeoutInterval = interval_milliseconds ()
        }.

    %% This gets called automatically as a result of our handlers
    %% including the optional _TimeoutInterval value in the returned
    %% Result
    handle_info(timeout, StateData)->
        {noreply, 
         _State = do_some_work(StateData),
          _TimeoutInterval = interval_milliseconds ()
        }.

这是有效的,但它非常脆弱:如果我想教我的服务器一条新消息,当我编写任何新的处理函数时,我必须记住在其返回值中包含可选的超时间隔.也就是说,如果我正在处理同步调用,我需要这样做:

    %% Someone wants to know our state; tell them
    handle_call(query_state_data, _From, StateData)->
        {reply, StateData, _NewStateData = whatever (), interval_milliseconds ()};

代替

    %% Someone wants to know our state; tell them
    handle_call(query_state_data, …

erlang erlang-otp

31
推荐指数
3
解决办法
8602
查看次数

标签 统计

erlang ×1

erlang-otp ×1