我在使用rbcurse(ncurses gem)的irc客户端应用程序中使用EventMachine.open_keyboard
,如下所示:
Fiber.new do
EM.open_keyboard(NbKeyboard) do |kb|
$input = Readline.readline("")
$buffer << $input
end
end.resume
此代码必须位于光纤中并以非阻塞方式捕获输入。在我尝试输入第二行后,ruby会抛出“死光纤”异常。我尝试添加循环,但也阻止,并且将光纤更改为线程不适用于键盘模块。我尝试阻止所有线程的其他方法,其中一个负责保持缓冲区更新/刷新。如何更改代码以在键入第一行后保持光纤打开/活动?要查看键盘模块(不自己编写),请转到here。
编辑: 感谢 Sawa 的回答,我明白了:
Fiber.new do
EM.open_keyboard(NbKeyboard) do |kb|
loop do
$input = Readline.readline("")
$buffer << $input
Fiber.yield
end
end
end.resume
答案 0 :(得分:0)
添加
loop{Fiber.yield}
在纤维体的末端。