ruby - 开始一个线程

dop*_*ner 4 ruby multithreading

我是ruby的新手,并试图解决线程问题

假设我有一个方法,我希望每隔x秒运行一次,如下所示

def say_hello
    puts 'hello world'
end
Run Code Online (Sandbox Code Playgroud)

我试图按如下方式运行它

Thread.new do
    while true do
        say_hello
        sleep(5)
    end
end
Run Code Online (Sandbox Code Playgroud)

但是当我运行脚本时,控制台上没有显示任何内容.我错过了什么?谢谢!

axb*_*unt 7

主线程在线程运行之前退出.使用join方法使当前线程等待say_hello线程完成执行(尽管它永远不会).

t = Thread.new do
    while true do
        say_hello
        sleep(5)
    end
end

t.join
Run Code Online (Sandbox Code Playgroud)


ror*_*rra 5

您正在创建Thread对象,但您不是在等待它完成执行,请尝试:

Thread.new do
    while true do
        say_hello
        sleep(5)
    end
end.join
Run Code Online (Sandbox Code Playgroud)

  • 这不完全正确.该线程也将在没有`join`的情况下执行,但是当主进程退出时它将被退出. (4认同)