Я использую 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