2 * Copyright (c) 2017 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
24 #import <Foundation/Foundation.h>
25 #import <dispatch/dispatch.h>
28 * The CKKSNearFutureScheduler is intended to rate-limit an operation. When
29 * triggered, it will schedule the operation to take place in the future.
30 * Further triggers during the delay period will not cause the operation to
31 * occur again, but they may cause the delay period to extend.
33 * Triggers after the delay period will start another delay period.
36 @interface CKKSNearFutureScheduler
: NSObject
38 @
property (readonly
) NSDate
* nextFireTime
;
39 @property
void (^futureOperation
)(void);
41 -(instancetype
)initWithName
:(NSString
*)name
42 delay
:(dispatch_time_t
)ns
43 keepProcessAlive
:(bool)keepProcessAlive
44 block
:(void (^)(void))futureOperation
;
46 -(instancetype
)initWithName
:(NSString
*)name
47 initialDelay
:(dispatch_time_t
)initialDelay
48 continuingDelay
:(dispatch_time_t
)continuingDelay
49 keepProcessAlive
:(bool)keepProcessAlive
50 block
:(void (^)(void))futureOperation
;
56 // Don't trigger again until at least this much time has passed.
57 -(void)waitUntil
:(uint64_t)delay
;