gen_server: звонить каждые X секунд

Статус gen_server представляет собой список и должен обрабатываться один раз каждые X секунд. Поэтому мне нужно выполнять handle_call({process},State) каждые X секунд.

Каков наилучший способ выполнения handle_call каждые X секунд?


person Daniel    schedule 24.02.2012    source источник


Ответы (1)


Модуль «Таймер» может решить вашу проблему. Например, в модуле реализации поведения 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}}; 
person Chen Yu    schedule 24.02.2012
comment
Я бы рекомендовал использовать erlang:send_after/3, который имеет точно такую ​​же семантику, но более легкий и не требует запуска сервера таймера. - person Hynek -Pichi- Vychodil; 24.02.2012