How to get accurate ticks from a timer (high‑resolution timer) in Ruby

1 Answer

0 votes
# Start timer (nanoseconds)
start = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)

# Do some work
1_000_000.times do
  # simple loop
end

# Stop timer
end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)

# Raw ticks (nanoseconds)
ticks = end_time - start

# Convert to time units
nanoseconds  = ticks.to_f
microseconds = nanoseconds / 1_000.0
milliseconds = nanoseconds / 1_000_000.0
seconds      = nanoseconds / 1_000_000_000.0

# Frequency (ticks per second)
frequency = 1_000_000_000 # 1 tick = 1 nanosecond

# Print results
puts "Elapsed ticks (ns): #{ticks}"
puts "Elapsed ms: #{milliseconds}"
puts "Elapsed us: #{microseconds}"
puts "Elapsed seconds: #{seconds}"
puts "Timer frequency: #{frequency} Hz"



# run:
#
# Elapsed ticks (ns): 36717780
# Elapsed ms: 36.71778
# Elapsed us: 36717.78
# Elapsed seconds: 0.03671778
# Timer frequency: 1000000000 Hz
# 

 



answered May 9 by avibootz
...