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

On 28/09/2007, Earle C. [email protected] 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
I don’t know about elegant, but it’s a little more easy to read
sleep [15, end_time - t].min
than the ?: business.

Earle C. wrote:

Thanks,
Earle

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

On Sat, 29 Sep 2007 04:07:40 +0900, Earle C. [email protected]
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

Maybe:

sleep [ 15, end_time - t ].min

-mental