2010-12-28 4 views
1

У меня небольшая проблема с актерами Scala и блокировкой ввода-вывода. Я использую актера, у которого есть анонимный актер, который потребляет входной поток. Проблема в том, что этот поток только считывает одну строку, а затем блокирует, не просыпаясь снова. Что меня смущает, так это то, что он работал, когда потребление происходило в методе действия (совпадение?). В приложении есть еще несколько актеров и потоки 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 _ => {} 
    } 
    } 
} 

С уважением, raichoo

+1

Почему вы используете актер вместо потока Java? Вы не пользуетесь какой-либо из возможностей, характерных для вашего актера, и вы хотите, чтобы он работал всегда. Это именно то, что делает поток. Просто переопределите метод run и поставьте свой блок try. –

+1

Откуда у вас все? Где объявляется «ввод»? Кому принадлежит «processInput»? Актеры касаются поведенческого ответа на _messages_, я не вижу сообщений в вашем примере. –

+0

Я, очевидно, был настолько мертв, что использовал актеров для этого, что я не видел здесь очевидного. Спасибо, что вернул меня в нужное русло. – raichoo

ответ

1

Вызов Readline находится внутри цикла {} так что это не произойдет снова и снова, пока она блокирует ,

 Смежные вопросы

  • Нет связанных вопросов^_^