OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart.async; | 5 part of dart.async; |
6 | 6 |
7 /** | 7 /** |
8 * A count-down timer that can be configured to fire once or repeatedly. | 8 * A count-down timer that can be configured to fire once or repeatedly. |
9 * | 9 * |
10 * The timer counts down from the specified duration to 0. | 10 * The timer counts down from the specified duration to 0. |
(...skipping 30 matching lines...) Expand all Loading... |
41 * | 41 * |
42 * The [callback] function is invoked after the given [duration]. | 42 * The [callback] function is invoked after the given [duration]. |
43 * | 43 * |
44 */ | 44 */ |
45 factory Timer(Duration duration, void callback()) { | 45 factory Timer(Duration duration, void callback()) { |
46 if (Zone.current == Zone.ROOT) { | 46 if (Zone.current == Zone.ROOT) { |
47 // No need to bind the callback. We know that the root's timer will | 47 // No need to bind the callback. We know that the root's timer will |
48 // be invoked in the root zone. | 48 // be invoked in the root zone. |
49 return Zone.current.createTimer(duration, callback); | 49 return Zone.current.createTimer(duration, callback); |
50 } | 50 } |
51 return Zone.current.createTimer( | 51 return Zone.current |
52 duration, Zone.current.bindCallback(callback, runGuarded: true)); | 52 .createTimer(duration, Zone.current.bindCallbackGuarded(callback)); |
53 } | 53 } |
54 | 54 |
55 /** | 55 /** |
56 * Creates a new repeating timer. | 56 * Creates a new repeating timer. |
57 * | 57 * |
58 * The [callback] is invoked repeatedly with [duration] intervals until | 58 * The [callback] is invoked repeatedly with [duration] intervals until |
59 * canceled with the [cancel] function. | 59 * canceled with the [cancel] function. |
60 * | 60 * |
61 * The exact timing depends on the underlying timer implementation. | 61 * The exact timing depends on the underlying timer implementation. |
62 * No more than `n` callbacks will be made in `duration * n` time, | 62 * No more than `n` callbacks will be made in `duration * n` time, |
63 * but the time between two consecutive callbacks | 63 * but the time between two consecutive callbacks |
64 * can be shorter and longer than `duration`. | 64 * can be shorter and longer than `duration`. |
65 * | 65 * |
66 * In particular, an implementation may schedule the next callback, e.g., | 66 * In particular, an implementation may schedule the next callback, e.g., |
67 * a `duration` after either when the previous callback ended, | 67 * a `duration` after either when the previous callback ended, |
68 * when the previous callback started, or when the previous callback was | 68 * when the previous callback started, or when the previous callback was |
69 * scheduled for - even if the actual callback was delayed. | 69 * scheduled for - even if the actual callback was delayed. |
70 */ | 70 */ |
71 factory Timer.periodic(Duration duration, void callback(Timer timer)) { | 71 factory Timer.periodic(Duration duration, void callback(Timer timer)) { |
72 if (Zone.current == Zone.ROOT) { | 72 if (Zone.current == Zone.ROOT) { |
73 // No need to bind the callback. We know that the root's timer will | 73 // No need to bind the callback. We know that the root's timer will |
74 // be invoked in the root zone. | 74 // be invoked in the root zone. |
75 return Zone.current.createPeriodicTimer(duration, callback); | 75 return Zone.current.createPeriodicTimer(duration, callback); |
76 } | 76 } |
77 // TODO(floitsch): the return type should be 'void', and the type | 77 var boundCallback = Zone.current.bindUnaryCallbackGuarded<Timer>(callback); |
78 // should be inferred. | |
79 var boundCallback = Zone.current | |
80 .bindUnaryCallback<dynamic, Timer>(callback, runGuarded: true); | |
81 return Zone.current.createPeriodicTimer(duration, boundCallback); | 78 return Zone.current.createPeriodicTimer(duration, boundCallback); |
82 } | 79 } |
83 | 80 |
84 /** | 81 /** |
85 * Runs the given [callback] asynchronously as soon as possible. | 82 * Runs the given [callback] asynchronously as soon as possible. |
86 * | 83 * |
87 * This function is equivalent to `new Timer(Duration.ZERO, callback)`. | 84 * This function is equivalent to `new Timer(Duration.ZERO, callback)`. |
88 */ | 85 */ |
89 static void run(void callback()) { | 86 static void run(void callback()) { |
90 new Timer(Duration.ZERO, callback); | 87 new Timer(Duration.ZERO, callback); |
(...skipping 11 matching lines...) Expand all Loading... |
102 * and the timer has not been canceled. | 99 * and the timer has not been canceled. |
103 * | 100 * |
104 * A periodic timer is active if it has not been canceled. | 101 * A periodic timer is active if it has not been canceled. |
105 */ | 102 */ |
106 bool get isActive; | 103 bool get isActive; |
107 | 104 |
108 external static Timer _createTimer(Duration duration, void callback()); | 105 external static Timer _createTimer(Duration duration, void callback()); |
109 external static Timer _createPeriodicTimer( | 106 external static Timer _createPeriodicTimer( |
110 Duration duration, void callback(Timer timer)); | 107 Duration duration, void callback(Timer timer)); |
111 } | 108 } |
OLD | NEW |