The ON TIMER statement sets up a timed event to be repeated at specified intervals throughout a program when enabled.
- In Qbasic the INTEGER seconds' parameter can be from 1 to 86400 seconds(one day).
- A TIMER ON statement must be made before an ON TIMER event is enabled in QB or QB64.
- TIMER STOP remembers previous events when enabled by a TIMER ON statement and the ON TIMER statement(s) may be executed immediately if a timer event has occurred.
- TIMER OFF disables timer event trapping. Events will not be remembered in a subsequent ON TIMER statement.
- ON TIMER events will interrupt a SLEEP call and RETURN to running program procedures.
- Qbasic can only use one TIMER event at a time and all TIMER code MUST be in the main code.
- Can use multiple numbered timer events and SINGLE floating point second values down to one millisecond(.001).
- MUST use the _FREETIMER function to assign free timer numbers. Use specific variables or an array for different TIMER values.
- If the TIMER number is omitted or TIMER(0) is used, the TIMER used is the base timer. The base TIMER cannot be freed! No number reference can be used to keep QB64 compatible with old Qbasic code.
- GOSUB or SUB procedures are allowed to be referenced, however CALL CANNOT be used.
- SUB parameter values are passed by value and should be SHARED or literal values!
- Use TIMER(n) FREE to release a timer event after it has been turned off and is no longer used.
- QB64 allows TIMER statements to also be inside of SUB and FUNCTION procedures.
- Does not currently interrupt SLEEP calls.
- $CHECKING:OFF can disable QB64 event checking. Use it ONLY with errorless code that needs every CPU cycle!
Example 1: How to update the time while printing at the same time in a program.
TIMER ON ' enable timer event trapping LOCATE 4, 2 ' set the starting PRINT position ON TIMER(10) GOSUB Clock ' set procedure execution repeat time DO WHILE INKEY$ = "": PRINT "A"; : SLEEP 6: LOOP TIMER OFF SYSTEM Clock: row = CSRLIN ' Save current print cursor row. col = POS(0) ' Save current print cursor column. LOCATE 2, 37: PRINT TIME$; ' print current time at top of screen. LOCATE row, col ' return to last print cursor position RETURN
- NOTE: SLEEP will be interrupted in Qbasic.
Example 2: Using a numbered TIMER to check the mouse button press status in QB64.
DIM SHARED Button AS LONG 'share variable value with Sub t1 = _FREETIMER 'get a timer number from _FREETIMER ONLY! ON TIMER(t1, .05) MouseClick TIMER(t1) ON DO LOCATE 1, 1 IF Button THEN PRINT "Mouse button"; Button; "is pressed."; ELSE PRINT SPACE$(70) END IF _DISPLAY LOOP UNTIL INKEY$ = CHR$(27) TIMER(t1) OFF TIMER(t1) FREE 'release timer END SUB MouseClick DO WHILE _MOUSEINPUT IF _MOUSEBUTTON(1) THEN COLOR 10: Button = 1 ELSEIF _MOUSEBUTTON(2) THEN COLOR 12: Button = 2 ELSE Button = 0 END IF LOOP END SUB