【发布时间】:2011-09-29 06:06:36
【问题描述】:
在 IRB 中运行以下代码:
t = Thread.new { loop { puts 'Hi' } }
我收到一个 hi 然后没有更多的输出。只有当我开始按 enter 键时,我才会按预期收到输出,直到我停止按 enter。
如果我这样做 t.join,一切都会按预期进行
问题发生在 IRB、pry 和 ripl 中使用 ruby 1.9.2-p180 和 1.9.2-p290 在 OSX 10.7 中的 rvm 1.8.0 和 OSX 10.6 中的 rvm 1.6.20 下
readline 是通过 rvm pkg install readline 安装的
感谢您的任何见解
【问题讨论】:
-
是关于代码的问题,还是在 IRB 中运行的代码? IRB 在幕后做了一些古怪的事情,所以这些是非常不同的问题。
-
因为它在 IRB 和 ripl 中运行。我知道 IRB 很古怪,但这并不意味着问题要么是由 IRB/ripl 引起的,要么是无法克服的。
-
当我从
.rb文件运行代码时,它的行为就像我期望在没有一个“嗨”的情况下关闭一样。然后我从文件和 irbThread.new{ loop{ puts 'Hi'; sleep 2} }中尝试了以下代码。看来 irb 还是让线程继续运行。 -
这与我所看到的相反。当我在 IRB 中运行该代码时,它会一直休眠,直到我按住 enter 键。
-
请列为答案并在 2 天后将其标记为已回答
标签: ruby multithreading macos ruby-1.9 ruby-1.9.2