The timer manager takes care of the management of the current timers. Timers in are messages that are sent to their target after a certain time.

Get the timer manager

The manager is fetched as a singleton from the service registry:

final ITimerManager tm = CServiceRegistry.getInstance()

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. - Innovative Distributed System