I personnally strive for fewer timers that cause a sequence of actions rather than a bunch that cause single actions. I do this because of neatness and simplicity.
Here are the timers I have running right now...
* Active timers:
* Timer .internal.timer 1s delay if $isalias(INTERNAL.TIMER.EVENT) { INTERNAL.TIMER.EVENT }
* Timer .failsafe 1s delay if ($isalias(STARTFAILSAFETIMER) != $true) { .timers.* off .unset %p.* %g.* .timer.REMOTE.REENABLE -oi 1 60 /REMOTE ON REMOTE OFF }
* Timer .msec.inc 5ms delay /inc %p.msec.inc 5 | if (%p.msec.inc > 999) %p.msec.inc = 0
* Timer .titlebar.update 50ms delay if $isalias(TITLEBAR.UPDATE)) { TITLEBAR.UPDATE }
The last timer, the "Titlebar updater" is good example of how I approach the problem.
It calls the following function.
ALIAS -l TITLEBAR.UPDATE {
if (($appactive != %l.appactive) || ($appstate != %l.appstate)) {
set %l.appactive $appactive
set %l.appstate $appstate
START.TITLEBAR.UPDATE
}
set %p.tb -
ROOTSIGNAL -n TITLEBAR.UPDATE
if (%p.tb !== $titlebar) {
/titlebar %p.tb
} }
ALIAS /ROOTSIGNAL { .SIGNAL $1- }
Using this technique, every script file loaded may be called, depending on if an ON *:SIGNAL:TITLEBAR.UPDATE: event exists within that file.
Anyhow, this should explain how to lower the number of timers in a script. I hope it helps.