我想在Ruby中创建一个计时器,在用户选择一定时间后,计时器响起或弹出一条消息.此外,是否有可能使定时器响铃直到用户做某件事(例如数学问题)?
使用线程:
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
Run Code Online (Sandbox Code Playgroud)
这段代码中运行了三个线程:
user_input线程从用户获取一个字符串并设置其value线程变量timer线程,休眠三秒钟,然后杀死user_input线程user_input线程完成没有timer线程,代码看起来就像单线程一样,提示用户输入然后继续.使用#join序列化两个线程的执行.主线程通过查看user_input的value线程变量获得用户交互的结果.
添加timer线程会导致user_input线程提前终止(在这种情况下为3秒).发生这种情况时,user_input线程没有设置其value线程变量,因此当主线程询问此变量时,它返回nil.这是主线程如何确定是否user_input因为接受来自用户的输入而被终止,或被timer线程杀死.
| 归档时间: |
|
| 查看次数: |
7541 次 |
| 最近记录: |