gen_server: вызывать каждые X секунд - PullRequest
3 голосов
/ 24 февраля 2012

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

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

1 Ответ

2 голосов
/ 24 февраля 2012

Модуль «Таймер» может решить вашу проблему. Например, в модуле реализации hept-интерфейса 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}}; 
...