2012-04-19 29 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(). 

您應該確認它不見了。