Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer 如何在Erlang中定期打印值_Timer_Erlang - Fatal编程技术网

Timer 如何在Erlang中定期打印值

Timer 如何在Erlang中定期打印值,timer,erlang,Timer,Erlang,我只是想让这个Erlang程序周期性地打印出一个值,我使用这个模块来实现这一点: -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程序周期性地打印出一个值,我使用这个模块来实现这一点:

   -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.
我引用了来自

我还尝试使用顶部答案的修改,如下所示:

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}.
-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.

在这两种情况下都不会打印出来。它只是告诉我一些类似{好吧,}的事情。似乎根本不会调用handle_info。

显示每秒的值,例如,如下所示:

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}.
-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.

有关此函数及其参数的信息,请阅读。这种方法不仅仅是使用定时器模块。

显示每秒的值,例如,如下所示:

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}.
-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.

有关此函数及其参数的信息,请阅读。这种方法不仅仅是使用定时器模块。

当然。如果您写下您正在做的事情(哪些函数调用)以及您希望在显示器上看到的内容,则会更好。erlang:display(0)。只显示0。在这一点上,它并不重要,它只是一个实验。我只是调用init()或start()。您误解了我,我想知道您希望得到什么结果。handle_info-用于处理gen_服务器OTP中的自发消息。你必须处理从计时器收到的信息。我是全新的Erlang,我一定不明白这里发生了什么。最终,我想要的是每秒在屏幕上打印一个值。也许这是完全错误的方法?消息本身并不是我真正关心的东西,它始终是同一条消息——在屏幕上显示一个值。我只是不太懂英语,所以我想在回答问题之前确保正确理解问题。当然。如果您写下您正在做的事情(哪些函数调用)以及您希望在显示器上看到的内容,则会更好。erlang:display(0)。只显示0。在这一点上,它并不重要,它只是一个实验。我只是调用init()或start()。您误解了我,我想知道您希望得到什么结果。handle_info-用于处理gen_服务器OTP中的自发消息。你必须处理从计时器收到的信息。我是全新的Erlang,我一定不明白这里发生了什么。最终,我想要的是每秒在屏幕上打印一个值。也许这是完全错误的方法?消息本身并不是我真正关心的东西,它始终是同一条消息——在屏幕上显示一个值。我只是不太懂英语,所以我想在回答问题之前确保正确理解问题。