aboutsummaryrefslogtreecommitdiff
path: root/src/eco_time.erl
blob: 587cca58bf0b5b54b597b01ac5fa0231b6869582 (plain)
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.