- @available(*, deprecated, renamed: "DispatchSourceTimer.scheduleRepeating(self:wallDeadline:interval:leeway:)")
- public func setTimer(walltime start: DispatchWallTime, interval: Double, leeway: DispatchTimeInterval = .nanoseconds(0)) {
- scheduleRepeating(wallDeadline: start, interval: interval, leeway: leeway)
+ ///
+ /// Sets the deadline, repeat interval and leeway for a timer event that fires at least once.
+ ///
+ /// Once this function returns, any pending source data accumulated for the previous timer values
+ /// has been cleared. The next timer event will occur at `wallDeadline` and every `repeating` seconds
+ /// thereafter until the timer source is canceled. If the value of `repeating` is `.infinity`,
+ /// the timer fires only once.
+ ///
+ /// Delivery of a timer event may be delayed by the system in order to improve power consumption
+ /// and system performance. The upper limit to the allowable delay may be configured with the `leeway`
+ /// argument; the lower limit is under the control of the system.
+ ///
+ /// For the initial timer fire at `wallDeadline`, the upper limit to the allowable delay is set to
+ /// `leeway`. For the subsequent timer fires at `wallDeadline + N * repeating`, the upper
+ /// limit is the smaller of `leeway` and `repeating/2`.
+ ///
+ /// The lower limit to the allowable delay may vary with process state such as visibility of the
+ /// application UI. If the timer source was created with flags `TimerFlags.strict`, the system
+ /// will make a best effort to strictly observe the provided `leeway` value, even if it is smaller
+ /// than the current lower limit. Note that a minimal amount of delay is to be expected even if
+ /// this flag is specified.
+ ///
+ /// Calling this method has no effect if the timer source has already been canceled.
+ ///
+ /// - parameter wallDeadline: the time at which the timer event will be delivered, subject to the
+ /// leeway and other considerations described above. The deadline is based on
+ /// `gettimeofday(3)`.
+ /// - parameter repeating: the repeat interval for the timer in seconds, or `.infinity` if the timer
+ /// should fire only once.
+ /// - parameter leeway: the leeway for the timer.
+ ///
+ @available(swift, introduced: 4)
+ public func schedule(wallDeadline: DispatchWallTime, repeating interval: Double, leeway: DispatchTimeInterval = .nanoseconds(0)) {
+ dispatch_source_set_timer((self as! DispatchSource).__wrapped, wallDeadline.rawValue, interval.isInfinite ? ~0 : UInt64(interval * Double(NSEC_PER_SEC)), UInt64(leeway.rawValue))