我想在Ruby中创建一个计时器,在用户选择的一段时间后,计时器响起或弹出一条消息。此外,是否有可能使定时器响铃,直到用户做某件事(例如数学问题)?
答案 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
此代码中正在运行三个线程:
user_input
线程,它从用户获取字符串并设置其value
线程变量timer
线程,它休眠三秒然后杀死user_input
线程user_input
线程完成如果没有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