[erlang-questions] perform a function on a fixed time interval

Roberto Ostinelli <>
Tue Aug 24 12:40:52 CEST 2010


2010/8/24 Hynek Vychodil <>:
> use timer:send_interval/2,3

sure, have this version too:

----------------------------------------------

-module(test).
-compile(export_all).


start() ->
	% start main loop
	Pid = spawn(?MODULE, main_loop, []),
	% start timer
	timer:send_interval(1000, Pid, compute),
	% start sender loop
	send_loop(Pid, 20),
	Pid ! shutdown.

% send 20 messages every 500 ms
send_loop(_Pid, 0) -> ok;
send_loop(Pid, Count) ->
	receive
	after 500 ->
		Pid ! test,
		send_loop(Pid, Count - 1)
	end.

main_loop() ->
	receive
		shutdown ->
			shutdown;
		test ->
			io:format("received test message~n"),
			main_loop();
		compute ->
			compute(),
			main_loop()
	end.
	
compute() ->
	io:format("ping~n").

----------------------------------------------

doesn't change much.

fact is: is this really the only way?

cheers,

r.


More information about the erlang-questions mailing list