2012-04-19 32 views
0

我在学习Erlang的货币编程。在Erlang货币编程中运行的多进程程序

这是一个来自Erlang.org的示例程序,但没有关于如何运行它的说明。

我以这种方式运行,

1> counter:start() 
<0.33.0> 

但是,我不知道该怎么办好其他功能,使过程(计数器:启动())可根据接收到的信息做的工作。

如何确认两个或多个进程是否已经真正生成?

另一个问题,如何在功能打印收到的消息?

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

任何帮助将不胜感激。

感谢

回答

2

其他功能将只使用您刚才创建的模块,像这样:

C = counter:start(), 
counter:increment(C), 
counter:increment(C), 
io:format("Value: ~p~n", [counter:value(C)]). 

您可以运行pman:start(),弹出(GUI)进程管理器,看看哪些流程,您有。

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)兴高采烈地运行,他们正在执行的计数器:循环/ 1功能。让我们停止过程37:

4> P37 = pid(0,37,0). 
<0.37.0> 
5> counter:stop(P37). 
stop 

检查进程的新名单:

6> i(). 

您应该确认它不见了。