在Ruby中制作计时器

我想在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 

这段代码中运行了三个线程:

  1. user_input线程,它从用户获取一个字符串并设置其value线程变量
  2. timer线程,它hibernate三秒钟,然后杀死user_input线程
  3. 主线程,它产生另外两个,然后等待user_input线程完成

如果没有timer线程,代码看起来就像单线程一样,提示用户输入然后继续。 使用#join序列化两个线程的执行。 主线程通过查看user_inputvalue线程变量来获取用户交互的结果。

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

有人想这样吗?

 puts "In how many Seconds you want me to beep?" t = gets.to_i sleep t puts "\a WAKE UP!" 

我的方式 :

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

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