Повторное использование волокна в Ruby

Я использую EventMachine.open_keyboard в своем клиентском приложении irc, которое использует rbcurse (ncurses gem), следующим образом:

Fiber.new do
    EM.open_keyboard(NbKeyboard) do |kb|
        $input = Readline.readline("")
        $buffer << $input
    end
end.resume

Этот код должен находиться в волокне и перехватывать входные данные неблокирующим образом. После того, как я пытаюсь ввести вторую строку, ruby ​​​​выдает исключение «мертвое волокно». Я пробовал добавлять циклы, но это тоже блокирует, а преобразование оптоволокна в поток не работает с модулем клавиатуры. Другие способы, которыми я пытался заблокировать все мои потоки, один из которых отвечает за обновление/обновление буфера. Как я могу изменить код, чтобы файбер оставался открытым/живым после ввода первой строки? Чтобы просмотреть модуль клавиатуры (я его не писал), перейдите здесь.

Изменить: благодаря ответу Sawa я понял это:

Fiber.new do
    EM.open_keyboard(NbKeyboard) do |kb|
        loop do
            $input = Readline.readline("")
            $buffer << $input
            Fiber.yield
        end
    end
 end.resume

person user3261959    schedule 02.02.2014    source источник


Ответы (1)


Добавлять

loop{Fiber.yield}

на конце тела волокна.

person sawa    schedule 02.02.2014
comment
Спасибо за ваш ответ, и это немного помогло, приложение не вылетает, и я могу напечатать столько строк, сколько хочу, но они не добавляются в буфер. Как это исправить? - person user3261959; 02.02.2014