我想在 Ruby 中制作一个计时器,在用户选择一定时间后,计时器响起或弹出一条消息。此外,是否可以让计时器响起,直到用户做了某件事(例如数学问题)?
问问题
9548 次
3 回答
6
使用线程:
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
的value
线程变量来获取用户交互的结果。
添加timer
线程会导致user_input
线程提前终止(在这种情况下为 3 秒)。发生这种情况时,user_input
线程尚未设置其value
线程变量,因此当主线程询问它以获取此变量时返回 nil。这是主线程如何确定是user_input
由于接受用户输入而终止,还是被timer
线程杀死。
于 2013-01-10T17:03:00.753 回答
1
有人这样想?
puts "In how many Seconds you want me to beep?"
t = gets.to_i
sleep t
puts "\a WAKE UP!"
于 2013-01-10T08:05:29.843 回答
1
我的方式 :
comt = 0
while (comt < 10)
sleep(1)
comt = comt +1
puts comt
end#while
那个显示:1 2 3 ... 10
于 2017-11-26T12:16:07.333 回答