Erlan*卵过程
问题描述:
以下是我试图从最好的方法中产生3个过程的程序。我想从所有进程接收响应并将它们存储在一个元组中,但我只能得到一个响应。Erlan*卵过程
test() ->
receive
{From,N} -> From!{self(),N},
loop()
end.
best(N) ->
Aid=spawn(fun t:loop/0),
Aid ! {self(),N},
Bid=spawn(fun t:loop/0),
Bid ! {self(),N},
Cid=spawn(fun t:loop/0),
Cid ! {self(),N},
receive
{Pid,Response} ->{Response}
end.
可有人请尽快帮我这个probem
答
你收到集团,在最佳/ 2退出函数,它接收一个消息。如果您在shell中启动此代码,则可以使用函数flush()验证其他消息是否仍在消息队列中。 (您发布的代码缺少t:loop/0函数,我猜它会根据N计算出一些结果并通过消息将结果返回给产卵器)
为了能够接收多条消息,必须将接收块放在一个递归调用自己的“循环”中,直到它获得所有答案。你将不得不使用一个变量,它允许递归循环知道它什么时候完成(期望的答案的数量,应该回答的进程的列表...)并且例如在列表变量中收集答案。
答
-module(wy).
-compile(export_all).
loop() ->
Self = self(),
receive
{From, Ref, N} ->
From ! {Self, Ref, N * N}
end.
receive_result(Ref) ->
receive
{Pid, Ref, R} ->
io:format("process ~p: ~p~n", [Pid, R]),
receive_result(Ref)
after 10 ->
ok
end.
best() ->
APid = spawn(fun loop/0),
BPid = spawn(fun loop/0),
CPid = spawn(fun loop/0),
Self = self(),
Ref = make_ref(),
APid ! {Self, Ref, 2},
BPid ! {Self, Ref, 3},
CPid ! {Self, Ref, 4},
receive_result(Ref).
您可以关注这个小代码。其结果是:
9> wy:best().
process <0.77.0>: 4
process <0.78.0>: 9
process <0.79.0>: 16
ok
产卵多个进程我用这种方法http://*.com/a/20573151/49197 – 2014-10-27 09:16:59
的函数名称为试验(+),我认为它应该是环() – abcd 2015-04-09 17:19:07