2012-02-24 9 views
2

gen_server의 상태는 목록이며 X 초마다 한 번 처리해야합니다. 따라서 handle_call ({process}, State)을 매 X 초마다 실행해야합니다.gen_server : X 초마다 호출

X 초마다 handle_call을 실행하는 가장 좋은 방법은 무엇입니까?

답변

2

"타이머"모듈로 문제를 해결할 수 있습니다. 정확히 같은 의미하지만, 더 가볍고 가지고 있으며, 타이머 서버가 시작하지 않아도 send_after/3` 예를 들어, OTP hehaviour를 실현하는 것이 모듈에서

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

나는'얼랑 사용을 추천 할 것입니다. –

관련 문제