在Ruby中制作计时器

时间:2013-01-10 03:45:46

标签: ruby timer

我想在Ruby中创建一个计时器,在用户选择的一段时间后,计时器响起或弹出一条消息。此外,是否有可能使定时器响铃,直到用户做某件事(例如数学问题)?

3 个答案:

答案 0 :(得分:5)

使用线程:

user_input = Thread.new do
  print "Enter something: "
  Thread.current[:value] = gets.chomp
end

timer = Thread.new { sleep 3; user_input.kill; puts }

user_input.join
if user_input[:value]
  puts "User entered #{user_input[:value]}"
else
  puts "Timer expired"
end

此代码中正在运行三个线程:

  1. user_input线程,它从用户获取字符串并设置其value线程变量
  2. timer线程,它休眠三秒然后杀死user_input线程
  3. 主线程,它产生另外两个,然后等待user_input线程完成
  4. 如果没有timer线程,代码看起来就像单线程一样,提示用户输入然后继续。使用#join序列化两个线程的执行。主线程通过查看user_input的{​​{1}}线程变量获得用户交互的结果。

    添加value线程会导致timer线程提前终止(在这种情况下为3秒)。发生这种情况时,user_input线程尚未设置其user_input线程变量,因此当主线程询问此变量时,返回nil。这是主线程如何确定value是否由于接受来自用户的输入而被终止,或被user_input线程杀死。

答案 1 :(得分:1)

这样的东西?

puts "In how many Seconds you want me to beep?"
t = gets.to_i

sleep t
puts "\a WAKE UP!"

答案 2 :(得分:0)

我的方式:

comt = 0
while (comt < 10)
    sleep(1)
    comt = comt +1
    puts comt
end#while

那个显示: 1 2 3 ... 10