/// <summary> /// Sleeps for the given amount of microseconds. /// Waits of 100 microseconds or less use busy waits. /// Returns the real elapsed microseconds. /// </summary> /// <param name="microsecs">The micro seconds.</param> /// <returns>Returns the real elapsed microseconds.</returns> public long SleepMicros(long microsecs) { if (microsecs <= 0) { return(0L); } if (microsecs <= uint.MaxValue) { return(Threads.GpioDelay(Convert.ToUInt32(microsecs))); } var componentSeconds = microsecs / SecondsToMicrosFactor; var componentMicrosecs = microsecs % SecondsToMicrosFactor; if (componentSeconds <= int.MaxValue && componentMicrosecs <= int.MaxValue) { BoardException.ValidateResult( Threads.GpioSleep( TimeType.Relative, Convert.ToInt32(componentSeconds), Convert.ToInt32(componentMicrosecs))); return(microsecs); } Threads.TimeSleep(componentSeconds + (componentMicrosecs / (double)SecondsToMicrosFactor)); return(microsecs); }