为什么Ruby的这个定时器代码使我的计算机工作如此困难?

时间:2012-10-13 21:28:53

标签: ruby timer

time_limit = gets.to_f * 60
start_time = Time.new
end_time = start_time + time_limit
x = 1
until Time.new >= end_time
  time_left = end_time - Time.new
  time_left_in_minutes = time_left / 60
  puts "Minutes Left: #{time_left_in_minutes}"
end
until x == 0
puts "Time Since End of #{time_limit / 60} Minutes: #{Time.new - end_time}"
end

我的电脑风扇旋转到全速,我的电脑因运行此代码而产生噪音。有没有更好的方法来做到这一点对处理器而言不是那么多工作?

2 个答案:

答案 0 :(得分:2)

您的计算机变热,因为您在等待超时时忙于循环。

最简单的解决方案:在循环中添加sleep(1)。这将导致它每秒运行一次而不是尽可能快。

你也可以睡觉正确的秒数。

然后,在等待一段时间之后你也忙着循环,直到x以某种方式变为0.这也将使用大量的CPU。

答案 1 :(得分:2)

这种情况正在发生,因为您要求您的处理器做很多工作!

看看你的循环:

until Time.new >= end_time
  time_left = end_time - Time.new
  time_left_in_minutes = time_left / 60
  puts "Minutes Left: #{time_left_in_minutes}"
end

只是旋转,旋转和旋转,直到达到时间限制。你的处理器只是继续前进。 (你也做了一些昂贵的事情 - 你在每次迭代时调用Time.new两次,对象创建可能很昂贵 - 但如果你的循环速度更快你就会旋转得更快。)

您可能需要在该循环中添加延迟,以便它每秒运行一次,或每分钟运行一次,或类似的东西。例如,sleep 30将暂停30秒。