1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
-module(eco_time).
-export([ticker/4]).
ticker(Watcher, Interval, ProcList, Timeout) ->
receive
{From, stop} ->
From ! {ok, stopped},
{ok, stopped}
after Interval ->
handle_tick(self(), ProcList, Timeout),
receive
{ok, endtick} ->
Watcher ! {endtick, self()},
ticker(Watcher, Interval, ProcList, Timeout);
{error, notock, Proc} ->
Watcher ! {error, notock, Proc, self()},
{error, notock, Proc}
end
end.
handle_tick(Ticker, [], _) ->
Ticker ! {ok, endtick};
handle_tick(Ticker, [This | Next], Timeout) ->
This ! {self(), tick},
receive
{This, tock} ->
handle_tick(Ticker, Next, Timeout)
after Timeout ->
Ticker ! {error, notock, This}
end.
|