View Source ExTimer (ex_timer v1.5.0)
ExTimer module.
Summary
Functions
add new timer to send msg after time milliseconds.
delete all the registerd timers.
return true if found the timer at the given msg, otherwise return false
get the minimum time(milliseconds) for the timer to expired.
delete the previous registerd timer.
call the callback handler (handle_timer) for the timer that has elapsed.
Types
@type state() :: term()
@type t() :: %ExTimer{now_ms: (-> integer()), timers: [timer_node()]}
@type time_ms() :: ExTimer.Node.time_ms()
@type timer_node() :: ExTimer.Node.t()
@type timer_node_msg() :: ExTimer.Node.msg()
Functions
@spec add(t(), timer_node_msg(), time_ms()) :: t()
add new timer to send msg after time milliseconds.
Examples
iex> now_ref = fn -> 500 end
iex> timer = ExTimer.new(now_ms: now_ref)
%ExTimer{now_ms: now_ref, timers: []}
iex> timer = ExTimer.add(timer, {:handler, :name, "uhaha"}, 2000)
%ExTimer{now_ms: now_ref, timers: [%ExTimer.Node{due_ms: 2500, msg: {:handler, :name, "uhaha"}}]}
iex> [timer_node] = timer.timers
[%ExTimer.Node{due_ms: 2500, msg: {:handler, :name, "uhaha"}}]
iex> timer_node.msg == {:handler, :name, "uhaha"}
true
iex> timer_node.due_ms == 2500
true
delete all the registerd timers.
Examples
iex> state = %{}
iex> now_ref = fn -> 500 end
iex> timer = ExTimer.new(now_ms: now_ref)
iex> timer = ExTimer.add(timer, {:handler, :name, "uhaha"}, 2000)
%ExTimer{timers: [%ExTimer.Node{due_ms: 2500, msg: {:handler, :name, "uhaha"}}], now_ms: now_ref}
iex> {_state, _timer} = ExTimer.clear(state, timer)
{%{}, %ExTimer{timers: [], now_ms: now_ref}}
@spec exist?(t(), timer_node_msg()) :: boolean()
return true if found the timer at the given msg, otherwise return false
Examples
iex> timer = %ExTimer{timers: [%ExTimer.Node{msg: {:handler, :name, "uhaha"}, due_ms: 2000}]}
iex> ExTimer.exist?(timer, {:handler, :name, "uhaha"})
true
get the minimum time(milliseconds) for the timer to expired.
Examples
def handle_info({:tick}, state) do
...
{state, timer} = ExTimer.update(state, state.timer)
state = put_in(state.timer, timer)
...
Process.send_after(self(), {:tick}, ExTimer.get_next_expiration(state.timer, 1000))
{:noreply, state}
end
@spec remove(t(), timer_node_msg()) :: t()
delete the previous registerd timer.
Examples
iex> timer = %{timers: [%ExTimer.Node{msg: {:handler, :name, "uhaha"}, due_ms: 2000}]}
iex> ExTimer.remove(timer, {:handler, :name, "uhaha"})
%{timers: []}
call the callback handler (handle_timer) for the timer that has elapsed.
Examples
def handle_timer({:tick}, state) do
...
{state, timer} = ExTimer.update(state, state.timer)
state = put_in(state.timer, timer)
...
{state, timer}
end