在Ruby中重用光纤

时间:2014-02-02 04:03:06

标签: ruby nonblocking eventmachine fiber

我在使用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

1 个答案:

答案 0 :(得分:0)

添加

loop{Fiber.yield}

在纤维体的末端。