0
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

我的电脑风扇全速旋转,我的电脑在运行此代码时变得嘈杂。有没有更好的方法来做到这一点,而不是为处理器做太多的工作?

4

2 回答 2

2

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

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

您也可以只睡正确的秒数。

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

于 2012-10-13T21:35:19.967 回答
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 秒。

于 2012-10-13T21:35:36.680 回答