Статус gen_server представляет собой список и должен обрабатываться один раз каждые X секунд. Поэтому мне нужно выполнять handle_call({process},State) каждые X секунд.
Каков наилучший способ выполнения handle_call каждые X секунд?
Статус gen_server представляет собой список и должен обрабатываться один раз каждые X секунд. Поэтому мне нужно выполнять handle_call({process},State) каждые X секунд.
Каков наилучший способ выполнения handle_call каждые X секунд?
Модуль «Таймер» может решить вашу проблему. Например, в модуле реализации поведения 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}};
erlang:send_after/3
, который имеет точно такую же семантику, но более легкий и не требует запуска сервера таймера.
- person Hynek -Pichi- Vychodil; 24.02.2012