Difference between revisions of "ON TIMER(n)"

From QB64 Wiki
Jump to navigation Jump to search
Line 2: Line 2:

<center>''Qbasic Syntax:'' ON TIMER(seconds%) GOSUB {linelabel|linenumber}</center>
''Qbasic'' {{PageSyntax}} ON TIMER(seconds%) GOSUB {linelabel|linenumber}

<center>''QB64 Syntax #1:'' ON TIMER([''number%'',] ''seconds!'') GOSUB {''linelabel''|''linenumber''}</center>
''QB64'' {{PageSyntax}} ON TIMER([''number%'',] ''seconds!'') {SubProcedure|GOSUB {''linelabel''|''linenumber''}}
<center>''QB64 Syntax #2:'' ON TIMER([''number%'',] ''seconds!'') SubProcedure [''parameter''[,...]]</center>

Revision as of 23:37, 9 May 2011

The ON TIMER statement sets up a timed event to be repeated at specified intervals throughout a program when enabled.

Qbasic == Syntax == ON TIMER(seconds%) GOSUB {linelabel|linenumber}

QB64 == Syntax == ON TIMER([number%,] seconds!) {SubProcedure|GOSUB {linelabel|linenumber}}


QBasic Information
  • 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.

QB64 Specific Information
  • 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 to store the 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 also be used to keep QB64 compatible with older 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!
  • Specific TIMER events can be turned on, suspended, turned off or freed using TIMER(n) ON, STOP, OFF or FREE.
  • Use TIMER(n) FREE to release a timer event after it has been turned off or 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!

QB64 Timing Alternatives
  • The TIMER function can be used to find timed intervals down to 1 millisecond(.001) accuracy.
  • The _DELAY statement can be used to delay program execution for intervals down to milliseconds.
  • _LIMIT can slow down loops to a specified number of frames per second. This can also alleviate a program's CPU usage.

Example: 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

See also

Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page