Difference between revisions of "ON TIMER(n)"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>SMcNeill
(style guidelines)
Line 1: Line 1:
The '''ON TIMER''' statement sets up a timed event to be repeated at specified intervals throughout a program when enabled.
+
The [[ON_TIMER(n)|ON TIMER]] statement sets up a timed event to be repeated at specified intervals throughout a program when enabled.
  
  
''Qbasic'' {{PageSyntax}}  
+
{{PageSyntax}}
::: ON TIMER(seconds%) GOSUB {linelabel|linenumber}
+
: '''ON TIMER'''({{Parameter|seconds%}}) [[GOSUB]] {{{Parameter|lineLabel}}|{{Parameter|lineNumber}}}
 +
: '''ON TIMER'''([{{Parameter|number%}},] {{Parameter|seconds!}}) { [[SUB]]procedure | [[GOSUB]] {{{Parameter|lineLabel}}|{{Parameter|lineNumber}}} }
  
  
''QB64'' {{PageSyntax}}  
+
{{PageDescription}}
::: ON TIMER([''number%'',] ''seconds!'') {SubProcedure|GOSUB {''linelabel''|''linenumber''}}
+
===Legacy syntax===
 +
* In the first syntax the [[INTEGER]] {{Parameter|seconds%}} parameter can be from 1 to 86400 seconds (one day).
 +
* A [[TIMER (statement)|TIMER ON]] statement must follow an '''ON TIMER''' event setup to initiate it.
 +
* [[TIMER (statement)|TIMER STOP]] disables timer events but remembers previous events when enabled again by a [[TIMER (statement)|TIMER ON]] statement, and the recorded events may be executed immediately if a timer event has occurred.
 +
* [[TIMER (statement)|TIMER OFF]] disables timer event trapping. Events will not be remembered in a subsequent [[TIMER (statement)|TIMER ON]] statement.
 +
* '''ON TIMER''' events will interrupt a [[SLEEP]] call and [[RETURN]] to running program procedures.
 +
* Only one TIMER event can be set at a time using this legacy syntax and all TIMER code must be in the main code, as it uses [[GOSUB]].
  
  
 
+
===QB64 syntax===
''Description''
+
* '''QB64''' can use multiple numbered timer events and [[SINGLE]] floating point second values down to one millisecond (.001).
<center> '''QBasic Information''' </center>
+
* {{Parameter|number%}} must be obtained from [[_FREETIMER]] function. Store _FREETIMER numbers in a variable or an array to be able to reference them later.
 
+
* If the '''TIMER''' number is omitted or {{InlineCode}}'''ON TIMER'''(0, {{Parameter|seconds!}}){{InlineCodeEnd}} is used, then the TIMER used is the ''base TIMER'' (same as in the legacy syntax above).
* In Qbasic the [[INTEGER]] ''seconds''' parameter can be from 1 to 86400 seconds(one day).
+
* [[SUB]] procedures are allowed to be referenced, but [[CALL]] must not be used.  
* A [[TIMER (statement)|TIMER ON]] statement must be made before an ON TIMER event is enabled in QB or QB64.
+
* '''[[SUB]] parameter values are passed by value and should be [[SHARED]] or literal values.'''
* [[TIMER (statement)|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.
+
* Specific '''TIMER''' events can be turned on, suspended, turned off or freed using [[TIMER (statement)|TIMER(n)]] ON, STOP, OFF or FREE.
* [[TIMER (statement)|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.
 
 
 
 
 
<center> '''QB64 Specific Information''' </center>
 
* 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 ON TIMER(0, seconds!) 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 (statement)|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.
 
* Use '''TIMER(n) FREE''' to release a timer event after it has been turned off or is no longer used.
 +
** The ''base TIMER'' cannot be freed.
 
* '''QB64''' allows TIMER statements to also be inside of SUB and FUNCTION procedures.
 
* '''QB64''' allows TIMER statements to also be inside of SUB and FUNCTION procedures.
* Does not currently interrupt [[SLEEP]] or [[_DELAY]] calls.
+
* '''ON TIMER''' events will interrupt a [[SLEEP]] call and [[RETURN]] to running program procedures.
* [[$CHECKING]]:OFF can disable QB64 event checking. '''Use it ONLY with errorless code that needs every CPU cycle!'''
+
* [[$CHECKING]]:OFF can disable all QB64 event checking. '''Setting $CHECKING:OFF is only designed for 100% stable, error-less sections of code, where every CPU cycle saved counts.'''
  
  
<center>'''QB64 Timing Alternatives'''</center>
+
==QB64 Timing Alternatives==
 
* The [[TIMER]] function can be used to find timed intervals down to 1 millisecond(.001) accuracy.
 
* 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.
 
* The [[_DELAY]] statement can be used to delay program execution for intervals down to milliseconds.
Line 41: Line 37:
  
  
 +
{{PageExamples}}
 
''Example:'' Using a numbered TIMER to check the mouse button press status in '''QB64'''.
 
''Example:'' Using a numbered TIMER to check the mouse button press status in '''QB64'''.
 
{{CodeStart}} '' ''
 
{{CodeStart}} '' ''
Line 77: Line 74:
 
* [[TIMER]], [[_FREETIMER]]
 
* [[TIMER]], [[_FREETIMER]]
 
* [[TIMER (statement)]], [[_DELAY]], [[_LIMIT]]
 
* [[TIMER (statement)]], [[_DELAY]], [[_LIMIT]]
* [[$CHECKING]] {{text|(QB64 C++ [[Metacommand]])}}
+
* [[$CHECKING]] {{text|(QB64 [[Metacommand]])}}
  
  
 
{{PageNavigation}}
 
{{PageNavigation}}

Revision as of 12:41, 16 October 2017

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


Syntax

ON TIMER(seconds%) GOSUB {lineLabel|lineNumber}
ON TIMER([number%,] seconds!) { SUBprocedure | GOSUB {lineLabel|lineNumber} }


Description

Legacy syntax

  • In the first syntax the INTEGER seconds% parameter can be from 1 to 86400 seconds (one day).
  • A TIMER ON statement must follow an ON TIMER event setup to initiate it.
  • TIMER STOP disables timer events but remembers previous events when enabled again by a TIMER ON statement, and the recorded events may be executed immediately if a timer event has occurred.
  • TIMER OFF disables timer event trapping. Events will not be remembered in a subsequent TIMER ON statement.
  • ON TIMER events will interrupt a SLEEP call and RETURN to running program procedures.
  • Only one TIMER event can be set at a time using this legacy syntax and all TIMER code must be in the main code, as it uses GOSUB.


QB64 syntax

  • QB64 can use multiple numbered timer events and SINGLE floating point second values down to one millisecond (.001).
  • number% must be obtained from _FREETIMER function. Store _FREETIMER numbers in a variable or an array to be able to reference them later.
  • If the TIMER number is omitted or ON TIMER(0, seconds!) is used, then the TIMER used is the base TIMER (same as in the legacy syntax above).
  • SUB procedures are allowed to be referenced, but CALL must not 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.
    • The base TIMER cannot be freed.
  • QB64 allows TIMER statements to also be inside of SUB and FUNCTION procedures.
  • ON TIMER events will interrupt a SLEEP call and RETURN to running program procedures.
  • $CHECKING:OFF can disable all QB64 event checking. Setting $CHECKING:OFF is only designed for 100% stable, error-less sections of code, where every CPU cycle saved counts.


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.


Examples

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



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