, , ...
erlang: cancel_timer/1, ( ). " ", . , , , , , ( ), , , , .
:
-define(INTERVAL, 60000). % One minute
init(Args) ->
...
% Start first timer
MyRef = erlang:make_ref(),
{ok, TRef} = erlang:send_after(?INTERVAL, self(), {trigger, MyRef}),
...
{ok, State
timer = TRef,
latest = MyRef
}}.
% Trigger only when the reference in the trigger message is the same as in State
handle_info({trigger, MyRef}, State =
% Do the action
...
% Start next timer
MyRef = erlang:make_ref(),
{ok, TRef} = erlang:send_after(?INTERVAL, self(), trigger),
...
{ok, State
timer = TRef,
latest = MyRef
}}.
% Ignore this trigger, it has been superceeded!
handle_info({trigger, _OldRef}, State) ->
{ok, State}.
- reset :
handle_info(reset, State =
% Cancel old timer
erlang:cancel_timer(TRef),
% Start next timer
MyNewRef = erlang:make_ref(),
{ok, NewTRef} = erlang:send_after(?INTERVAL, self(), trigger),
{ok, State
timer = NewTRef,
latest = MyNewRef
}}.
, , .
, , , , , , , .