Wie

2016-04-17 2 views
0
Wert regelmäßig in Erlang auszudrucken

Im Versuch, einfach dieses Erlang-Programm zu erhalten Wert regelmäßig auszudrucken und ich bin mit diesem Modul so tun:Wie

-module(hot). 
    -export([start/0,handle_info/2, add/1]). 

    start() -> 
      Num = 0, 
      timer:send_interval(1000, interval), 
      {ok, Num}. 

    handle_info(interval, Num) -> 
      erlang:display(0), 
      {noreply, Num}. 

    add(X) -> 
      X+2. 

Ich Referenzierung eines die Antworten von this post

ich habe auch versucht, eine Modifikation von oben Antwort wie folgt verwendet:

init([]) -> 
    Timer = erlang:send_after(1, self(), check), 
    {ok, Timer}. 

handle_info(check, OldTimer) -> 
    erlang:cancel_timer(OldTimer), 
    erlang:display(0), 
    Timer = erlang:send_after(1000, self(), check), 
    {noreply, Timer}. 

Nichts druckt in jedem Fall aus. Es sagt mir nur etwas wie {ok, < 0.43.0>}. Es scheint, dass handle_info nie aufgerufen wird.

+0

natürlich. Es wäre besser, wenn Sie schreiben, was Sie tun (welcher Funktionsaufruf) und was Sie auf dem Display erwarten. –

+0

erlang: Anzeige (0). Zeigen Sie einfach 0 an. An diesem Punkt ist es egal, was es ist, es ist nur ein Experiment. Ich rufe nur init() oder start(). – Khaines0625

+0

Sie haben mich falsch verstanden, ich möchte wissen, was Sie als Ergebnis bekommen wollen. handle_info - wird für die Behandlung von spontanen Nachrichten in gen_server OTP verwendet. Sie müssen die vom Timer empfangene Nachricht bearbeiten. –

Antwort

4

Zeigen Sie den Wert jeder Sekunde kann man zum Beispiel wie folgt:

-module(test). 
-export([start/1]). 

start(Num) when not is_number(Num)-> {error,not_a_number}; 
start(Num)->spawn(fun()->print(Num) end). 

print(Num)-> 
    erlang:start_timer(1000, self(), []), 
    receive 
      {timeout, Tref, _} -> 
      erlang:cancel_timer(Tref), 
      io:format("~p~n",[Num]), 
      if 
       Num =:=0 -> io:format("Stop~n"); 
       true -> print(Num-1) 
      end 
    end. 

Weitere Informationen zu dieser Funktion und die Argumente, die Sie documentation lesen kann. Solch eine Methode ist mehr effecient als die Verwendung des Timer-Moduls.