Ruby:编辑线程程序以在终止时输入函数

时间:2015-06-08 11:01:05

标签: ruby multithreading

基本上在我搜索将循环的代码并在用户输入时终止时,我设法找到代码here,经过一些修改后,产生了这个:

#desired destination method, however loop persists!!

def desired_method 
    print "method entered"
end



Thread.new do
    while line = STDIN.gets
        break if line.chomp == "" # code detects user input
    end
    desired_method
end



# program will loop here until user presses enter

loop do 
    puts "foo"
    sleep 1
end

这段代码非常棒,当我按下Enter键时会进入'desired_method'方法,但循环仍然存在!在“方法输入”后永久打印'foo'!!我在发布关于如何杀死线程的问题之前做了一些研究,我相信这可能会得到答案。我的尝试包括命名线程并使用'thread.exit'函数来杀死它,但是这些技术仍然不成功。

任何人都可以说明如何在没有持久的“foo”打印的情况下输入'desired_method'方法吗?

提前致谢,非常感谢。

1 个答案:

答案 0 :(得分:1)

这里一个简单的解决方案是使用semaphore,在两个地点之间具有可变访问权限的线程之间发出信号:

# This will be out stop flag, for signalling between threads.
@time_to_stop = false

def desired_method 
    print "method entered"
    # Here we want the loop in the other thread to stop.
    @time_to_stop = true
end

Thread.new do
    while line = STDIN.gets
        break if line.chomp == "" # code detects user input
    end
    desired_method
end

# program will loop here until user presses enter
loop do 
    puts "foo"
    sleep 1
    # only continue if the stop flag is not set.
    break if @time_to_stop
end

希望这有帮助。