基本上在我搜索将循环的代码并在用户输入时终止时,我设法找到代码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'方法吗?
提前致谢,非常感谢。
答案 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
希望这有帮助。