2013-10-18 31 views
0

我有一個主進程將從三個進程接收結果。每個產生的進程將返回一個元組,如{Pid,R}。我的目標是從三個進程中獲得結果(3)並將它們保存在{R1,R2,R3}之類的元組中。我不知道如何將結果保存在元組內。以下是如何獲得結果。有人可以幫助我從主進程返回元組嗎?謝謝。如何從主進程接收多個進程

mainprocess(N)-> 
    receive 
     {Pid1,R1}-> 
      R1, 
      loop(); 
     {Pid2,R2}-> 
      R2, 
      loop(); 
     {Pid3,R3}-> 
      R3, 
      loop() 
    end. 
+0

您的縮進是可怕的破碎。不要混合使用空格和製表符。 –

+0

你是什麼意思,「每個產卵過程將返回一個元組......」?你是否知道他們必須將它們作爲消息發送給接收進程,而不是返回它們? –

回答

1

有很多資料在你的問題不見了,所以我做了一些假設:

你不介意的信息的順序,

的mainprocess功能僅在那裏從3收集的答案其他的,

產卵的過程,並保持長期的生活過程中出了這個問題

與這些假設的範圍,你可以簡單地收集答案在馬的責任inprocess函數在3個不同的變量,並在最後建立元組:

main_process_init(N) -> 
%% I don't know what is the usage of N in your example I just forward it to the loop 
    R1 = get_answer(), 
    R2 = get_answer(), 
    R3 = get_answer(), 
    main_process_loop(N,{R1,R2,R3}). 
    %% I suppose that when you got the answers you can enter in the main process loop 

%% each message is received in a separate receive bloc 
get_answer() -> 
    receive 
     {_,R} -> R %% you never use the information Pid, so don't care about its value 
    end. 
+0

謝謝。這是我需要的。 – user1874435

1

最簡單的解決辦法是等待每個進程在單獨的接收,這樣

main() -> 
    Pid1 = spawn(?MODULE, worker, [self(), 1]), 
    Pid2 = spawn(?MODULE, worker, [self(), 2]), 
    Pid3 = spawn(?MODULE, worker, [self(), 3]), 
    R1 = receive 
      {Pid1, N} -> 
       N 
     end, 
    R2 = receive 
      {Pid2, N2} -> 
       N2 
     end, 
    R3 = receive 
      {Pid3, N3} -> 
       N3 
     end, 
    {R1,R2,R3}. 

在這裏,您將等待來自第一進程的結果開始。一旦接收到它,它就會繼續並等待第二個過程的結果,然後等待第三個結果。不需要遞歸調用main並組裝結果元組。

+0

謝謝。這解決了我的問題。我剛開始學習Erlang兩週,所以我需要學習很多東西。我不知道我們可以將接收語句轉換爲變量。現在我明白了。 TY。 – user1874435