[erlang-questions] Re: erl startup
Wes James
comptekki@REDACTED
Wed Jun 2 00:25:03 CEST 2010
On Tue, May 18, 2010 at 10:14 PM, Bernard Duggan <bernie@REDACTED> wrote:
> On 19/05/10 13:46, Wes James wrote:
>>
>> I'm trying run my_mod which i'm running in conjunction with yaws so
>> that the my_mod will every 5 minutes go and check a printer for home
>> and grab the pages printed and stick it in a mnesia table. I then use
>> a .yaws page to look at the mnesia page count values. This is why I'm
>> trying to get the timer to work as I start yaws and keep going after
>> yaws is started.
>>
>
> Okay, so it seems like this issue here is the notion of "running a module".
> I don't think it means what you think it means (actually I don't think it
> means anything at all, really). What it sounds like you want to do is spawn
> a process that does some startup stuff and then basically sits idle to allow
> its ets table and timer to continue to work.
> There's a couple of ways to approach this - the "OTP way(s)" would be to
> either wrap the whole thing in an application or gen_server behaviour. That
> gives you all sorts of nice extras (easy supervision, appearing in appmon
> etc) but does require a bit of scaffold code and has something of a learning
> curve before you figure out how to do it "right" (hell, I'm /still/ figuring
> the details of that out).
> The much easier (though less flexible and powerful) way is to modify your
> code to something like this:
>
> start() ->
> spawn_link(?MODULE, run, []).
>
> run() ->
> Id_Table=ets:new(start_id_table, []),
> io:format("~w~n", [Id_Table]),
> {ok, TRef}=timer:apply_interval(1000*60*5, prt, getc, []), % 1000
> milliseconds * 60 * 5 = 5 minutes
> ets:insert(Id_Table, {id, TRef}),
> wait_for_exit().
>
> wait_for_exit() ->
> receive
> some_exit_signal -> ok;
> _ -> wait_for_exit()
> end.
>
>
> (Haven't compile or tested this - there's probably a syntax error or two).
> Note the tail-recursive receive loop at the end which keeps the process
> alive and keeps its message queue empty but does nothing else.
>
> Also, just as a tip: I recently discovered the timer:minutes/1 function and
> its friends - much easier to read and code than "1000*60*5" :)
>
> Cheers,
>
> Bernard
>
>
Bernard,
I tried this and didn't get it to work at first, but then I came back
to tested it again and it does work. Thx for your input!
-wes
More information about the erlang-questions
mailing list