無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

receive構文でのタイムアウト

Getting Started With Erlangの続き。ちょい忙しいので「4.1 Timeouts」だけ。

receive構文でのタイムアウト

receive構文では、メッセージ待ち受けがタイムアウトした場合の処理を指定することができます。以下の形式で書きます。

receive 
  <パターン> ->
     <処理>;
  <パターン> ->
     <処理>;
  <パターン> ->
     <処理>
     
after <タイムアウト待ち時間> ->
     <タイムアウト時に実行する処理>
end.
  • タイムアウト時間には待ち時間をミリ秒で指定します。
  • receiveの最後の処理にも、afterの最後の処理にも「;」はつかないので注意。

例としていつものサンプルにタイムアウトを追加してみました。

-module(kitten).
-export([start/1, run/1]).

% ねこサーバー。
% メッセージに応じて一定のアクションを行う。
% プロセスには"kitten"の名前で登録される。
start(Name) ->
  PID = spawn( kitten, run, [Name] ),
  register(kitten, PID).

run( Name ) ->
  receive
    run   -> io:format( "~w : run!~n", [Name] ),  run(Name);
    jump  -> io:format( "~w : jump!~n", [Name] ), run(Name);
    stop  -> io:format( "~w : stop~n", [Name] ),  run(Name);
    sleep -> ok

  % メッセージが送付されなかった場合のタイムアウト処理
  % afterに続けて待ち時間をミリ秒で指定する。
  after 5000 ->
    io:format( "~w : wait..~n", [Name] ),
    run(Name)
  end.

実行し、しばらく放置するとタイムアウトのメッセージが出力されます。

2> kitten:start(mii).
true
3> mii : wait..
3> mii : wait..
3> mii : wait..
3> mii : wait..