2010-12-28 29 views
1

ScalaアクターとIOのブロックに少し問題があります。私は、入力ストリームを消費する匿名のアクタを持つアクタを使用しています。問題は、このストリームは1行だけを読み込み、次に再び起きることなくブロックすることです。私が混乱させるのは、消費が行為の方法で起こったときに働くということです(偶然?)。アプリケーション自体にはいくつかのアクターとJavaスレッドがあります。[Scala]:アクターとブロックIOの問題

私の質問です:このような問題を回避するための一般的な慣行は何ですか?すべてのポインタ?

この問題が発生するコードがやや次のようになります。

object TestActor extends Actor { 

    private val instream = actor { 
    loop { 
     try { 
     println(processInput(input.readLine)) //bufferedinputstream. blocks, no wakeup 
     } catch { 
     case e: Exception => 
      println(e.toString) 
     } 
    } 
    } 


    def act(): Unit = { 
    react { 
     ... 
     case _ => {} 
    } 
    } 
} 

よろしく、のreadLineへ raichoo

+1

なぜJavaスレッドの代わりにアクターを使用していますか?あなたは俳優特有の機能のどれかを利用しておらず、あなたはそれを常に実行したいと思っています。スレッドとまったく同じです。 runメソッドをオーバーライドしてtryブロックをそこに置きます。 –

+1

あなたはどこからすべてを得ていますか? 「入力」はどこで宣言されていますか?誰が "processInput"を所有していますか? Actorsは_messages_に対する行動的な反応です。あなたの例ではメッセージは全く表示されません。 –

+0

私は明らかに、このために俳優を使って死んでしまったので、私はここではっきりとわかりませんでした。私を軌道に戻してくれてありがとう。 – raichoo

答えて

0

質問はViktorのコメントで回答されています。

1

コールは、{ループの内側である}それまでブロック何度も起こるだろう。