我正在尝试学习Erlang货币编程。
这是从Erlang.org获得的示例程序,但没有关于如何运行它的说明。
我以这种方式运行,
1> counter:start()
<0.33.0>
但是,我不知道如何运行其他函数,以便进程(counter:start())可以根据收到的消息进行工作。
如何确认真正生成了两个或多个进程?
另一个问题,如何在函数中打印出收到的消息?
-module(counter).
-export([start/0,loop/1,increment/1,value/1,stop/1]).
%% First the interface functions.
start() ->
spawn(counter, loop, [0]).
increment(Counter) ->
Counter ! increment.
value(Counter) ->
Counter ! {self(),value},
receive
{Counter,Value} ->
Value
end.
stop(Counter) ->
Counter ! stop.
%% The counter loop.
loop(Val) ->
receive
increment ->
loop(Val + 1);
{From,value} ->
From ! {self(),Val},
loop(Val);
stop -> % No recursive call here
true;
Other -> % All other messages
loop(Val)
end.
任何帮助将不胜感激。
感谢
答案 0 :(得分:2)
其他功能只会使用您刚创建的模块,如下所示:
C = counter:start(),
counter:increment(C),
counter:increment(C),
io:format("Value: ~p~n", [counter:value(C)]).
您可以运行pman:start()
调出(GUI)流程管理器以查看您拥有的流程。
答案 1 :(得分:2)
除了Emil所说的,您还可以使用i()
命令来验证正在运行的进程。让我们开始三个计数器:
1> counter:start().
<0.33.0>
2> counter:start().
<0.35.0>
3> counter:start().
<0.37.0>
并运行i()
:
...
<0.33.0> counter:loop/1 233 1 0
counter:loop/1 2
<0.35.0> counter:loop/1 233 1 0
counter:loop/1 2
<0.37.0> counter:loop/1 233 1 0
counter:loop/1 2
...
如您所见,上述过程(33,35和37)正在快乐地运行,并且它们正在执行counter:loop / 1函数。让我们停止流程37:
4> P37 = pid(0,37,0).
<0.37.0>
5> counter:stop(P37).
stop
检查新的进程列表:
6> i().
你应该验证它已经消失了。