Sleep for lesser of two values

I have a loop that runs for a variable amount of time, as defined by
@duration. I need to re-execute the command every 15 seconds for the
length of @duration, which is a float and can have any value. Can
anyone think of a more elegant way to do this than the code below?

end_time = Time.now + @duration
while (t = Time.now) < end_time
  # execute command
  sleep((15 < (end_time - t)) ? 15 : (end_time - t))
end

Thanks,
Earle

···

--
Posted via http://www.ruby-forum.com/.

I don't know about elegant, but it's a little more easy to read
  sleep [15, end_time - t].min
than the ?: business.

···

On 28/09/2007, Earle Clubb <eclubb@valcom.com> wrote:

I have a loop that runs for a variable amount of time, as defined by
@duration. I need to re-execute the command every 15 seconds for the
length of @duration, which is a float and can have any value. Can
anyone think of a more elegant way to do this than the code below?

end_time = Time.now + @duration
while (t = Time.now) < end_time
  # execute command
  sleep((15 < (end_time - t)) ? 15 : (end_time - t))
end

Earle Clubb wrote:

I have a loop that runs for a variable amount of time, as defined by
@duration. I need to re-execute the command every 15 seconds for the
length of @duration, which is a float and can have any value. Can
anyone think of a more elegant way to do this than the code below?

end_time = Time.now + @duration
while (t = Time.now) < end_time
  # execute command
  sleep((15 < (end_time - t)) ? 15 : (end_time - t))
end

Thanks,
Earle

sleep([15, end_time -t].min)

···

--
RMagick OS X Installer [http://rubyforge.org/projects/rmagick/\]
RMagick Hints & Tips [http://rubyforge.org/forum/forum.php?forum_id=1618\]
RMagick Installation FAQ [http://rmagick.rubyforge.org/install-faq.html\]

Maybe:

sleep [ 15, end_time - t ].min

-mental

···

On Sat, 29 Sep 2007 04:07:40 +0900, Earle Clubb <eclubb@valcom.com> wrote:

I have a loop that runs for a variable amount of time, as defined by
@duration. I need to re-execute the command every 15 seconds for the
length of @duration, which is a float and can have any value. Can
anyone think of a more elegant way to do this than the code below?

end_time = Time.now + @duration
while (t = Time.now) < end_time
  # execute command
  sleep((15 < (end_time - t)) ? 15 : (end_time - t))
end