Пример #1
0
        /// <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);
        }