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