2016-11-21 23 views
2

新しいプロセスでstdinから読み込むには?私はラインを入れて、メインプロセスでのみ印刷することができます。私はget_lineコンソールデバイスまたはsthに似ていますか、それとも不可能ですか?"メインではない"プロセスでコンソールから読み込む方法

マイコード:

-module(inputTest). 
-compile([export_all]). 

run() -> 
    Message = io:get_line("[New process] Put sth: "), 
    io:format("[New process] data: ~p~n", [Message]). 


main() -> 
    Message = io:get_line("[Main] Put sth: "), 
    io:format("[Main] data: ~p~n", [Message]), 
    spawn(?MODULE, run, []). 

答えて

6

問題は、あなたのmain/0プロセスがrun/0を生成しますし、すぐに終了していることです。 run/0が終了するまで、main/0を待つようにしてください。

-module(inputTest). 
-compile([export_all]). 

run(Parent) -> 
    Message = io:get_line("[New process] Put sth: "), 
    io:format("[New process] data: ~p~n", [Message]), 
    Parent ! {self(), ok}. 

main() -> 
    Message = io:get_line("[Main] Put sth: "), 
    io:format("[Main] data: ~p~n", [Message]), 
    Pid = spawn(?MODULE, run, [self()]), 
    receive 
     {Pid, _} -> 
      ok 
    end. 

run/1 —を産卵した後、我々はそれ—に、当社のプロセスIDを渡すためにそれを変更することを、我々はそれからメッセージを受信するのを待つことに注意してください:ここではあなたがそれを行うことができます方法です。 run/1では、一旦出力に出力すると、親に、完了したことを知らせるメッセージを送信します。これをerlシェルで実行すると、次のようになります。

1> inputTest:main(). 
[Main] Put sth: main 
[Main] data: "main\n" 
[New process] Put sth: run/1 
[New process] data: "run/1\n" 
ok 
+0

ありがとうございました! 入力機能を使用するには、メインプロセスが生きていなければならないことはわかりませんでした。 –

関連する問題