Я использую EventMachine.open_keyboard
в моем клиенте приложение Irc, который использует rbcurse (Ncurses камень), следующим образом:Повторное использование оптоволоконной в Рубине
Fiber.new do
EM.open_keyboard(NbKeyboard) do |kb|
$input = Readline.readline("")
$buffer << $input
end
end.resume
Этот код должен быть в волокне и поймать вход в неблокируемом образом. После того, как я попытаюсь ввести вторую строку, ruby выбрасывает исключение «мертвого волокна». Я пробовал добавлять циклы, но это блокирует также, и изменение волокна в поток не работает с клавиатурным модулем. Другие способы, с помощью которых я пытался заблокировать все мои потоки, один из которых отвечает за сохранение/обновление буфера. Как я могу изменить код, чтобы сохранить Fiber открытым/живым после ввода первой строки? Чтобы просмотреть модуль клавиатуры (сам не писал), перейдите here.
Edit: Благодаря ответу Савва я понял это:
Fiber.new do
EM.open_keyboard(NbKeyboard) do |kb|
loop do
$input = Readline.readline("")
$buffer << $input
Fiber.yield
end
end
end.resume
Спасибо за ваш ответ, и это несколько помогло, приложение не разбилось, и я могу набрать столько строк, сколько хочу, но они не добавлены в буфер. Как это исправить? – user3261959