sleep_spin Subroutine

private subroutine sleep_spin(s)

Busy-wait for approximately s seconds.

This implementation uses system_clock to measure elapsed ticks. It does not yield to the OS scheduler and may consume CPU while waiting.

Arguments

  • s: requested duration in seconds. Non-positive values return immediately.

Arguments

Type IntentOptional Attributes Name
real, intent(in) :: s

Called by

proc~~sleep_spin~~CalledByGraph proc~sleep_spin sleep_spin proc~sleep_seconds sleep_seconds proc~sleep_seconds->proc~sleep_spin proc~supervisor_loop supervisor_loop proc~supervisor_loop->proc~sleep_seconds proc~watcher_run watcher_t%watcher_run proc~watcher_run->proc~sleep_seconds proc~maybe_supervise maybe_supervise proc~maybe_supervise->proc~supervisor_loop

Source Code

   subroutine sleep_spin(s)
      real, intent(in) :: s
      integer(int64) :: rate, t0, t1, ticks
      if (s <= 0.0) return
      call system_clock(count_rate=rate)
      if (rate <= 0_int64) rate = 1000_int64
      ticks = int(s * real(rate), int64)
      if (ticks <= 0_int64) return
      call system_clock(t0)
      do
         call system_clock(t1)
         if (t1 - t0 >= ticks) exit
      end do
   end subroutine sleep_spin