0
私はErlangで機能の仕事をした後に私の受信を行うことに問題があります。私はグーグルでこれをしばらく頭に打ちましたが、それを理解できていないようで、助けが必要です。私は以下のプロセスを実行し、メッセージを待つプロセスを持っています。Erlang after after
% Waits for messages, and puts them into the list.
% If the list has the same length as the Length variable
% which is the original provided list, then it means we are done
% and can print the results.
% If the MaxTime has passed it should just print the provided list.
wait_max_time(List, Length, MaxTime) ->
io:format("I am ~p and waiting...~n", [self()]),
receive
X ->
Results = List ++ [X],
case length(Results) =:= Length of
true ->
io:format("~p~n", [Results]),
exit(self());
false ->
wait(Results, Length)
end
after MaxTime -> io:format("List is ~p~n", [List])
end.
上記のすべてがうまくいくように見えますが、それは常に計算され、印刷文で確認されています。
しかし、計算に時間がかかりすぎる場合は、そのリストを印刷して続行します。しかし、決してコード内で走ったことがないと、何が間違っていますか?
'false - > ...'で 'wait_max_time'を呼び出し、' wait'を呼び出さなかったのですか? – Dogbert
問題点:[リスト処理](http://erlang.org/doc/efficiency_guide/listHandling.html)の#1ルールは、リストの末尾に決して追加しないということです。非常に短いリストでも問題ありませんが、 '[X |リスト]の代わりに 'リスト++ [X] 'を使用します。 –
あなたが指定したコードは実際に問題を実証していません。 [SSCCE](http://sscce.org/)はあなたに良い答えを得るための道のりです。あなたがこのプロセスにメッセージを流すことで、あなたが遅くなっているかもしれません。 'after'タイムアウトは、メッセージが受信されるたびにリセットされることに注意してください。 –