1

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
4

1 回答 1

0

添加

loop{Fiber.yield}

在纤维体的末端。

于 2014-02-02T04:10:15.830 回答