ITimerManager
The timer manager takes care of the management of the current timers.
Timers in
Get the timer manager
The manager is fetched as a singleton from the service registry:
final ITimerManager tm = CServiceRegistry.getInstance() .getService(ITimerManager.class);
As always, make sure that the service starter of your package has a dependency on the
ITimerManager
to ensure that the service already exists.
Start a timer
One way to start a timer is to use the corresponding methods of the timer manager directly. The method requires
- a record ID to identify the message
- a target address for which target the message is to be received
- a timeout in milliseconds (when does the message arrive)
- a flag whether the message should be repeated
- an optional record for payload data
long createAndStartTimer(@NotNull IId aMID, @NotNull CTargetAddress aAddress, long aDelay, boolean aRepeat, @Nullable CRecord aRecord);
The method returns a handle that can be used to identify the timer.
Thus, other methods can be called to manage the timer.
An invalid handle is ITimerManager.INVALID
(0).
A timeout of less than 10 ms makes little sense, because the resolution of the timers does not allow this.
Be careful when using repeated timers:
If the application is at breakpoint during debugging, more timers are produced.
If the processing of a timer takes longer than the timeout, further timer messages are also sent. For short timeouts, it is usually better to use one-time timers. After processing the timer event, a new timer can then be raised.
Dismissing a timer
The timer can be stopped at any time. A timer that is not to be repeated is automatically deleted after the message is sent.
boolean dismissTimer(long aHandle);
The method returns false
if the timer was not found.
Resetting a timer
A timer can be reset at any time. With this method it is stopped, but not deleted, but restarted immediately.
boolean resetTimer(long aHandle);
The method returns false
if the timer was not found.
Check a timer
It can be checked whether a timer still exists.
boolean isTimerActive(long aHandle);
The method returns false
if the timer was not found.
Likewise, it can be checked whether a timer is known for a given record ID and a destination address.
long getTimerHandle(@NotNull IId aMID, @NotNull CTargetAddress aReceiver);
A return value of ITimerManager.INVALID
(0) means that no timer was found.