Difference between revisions of "ON TIMER(n)"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>SMcNeill
m (-)
 
(7 intermediate revisions by 2 users not shown)
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.
  
  
<center>''Qbasic Syntax:'' ON TIMER(seconds%) GOSUB {linelabel|linenumber}</center>
+
{{PageSyntax}}  
 
+
: '''ON TIMER'''({{Parameter|seconds%}}) [[GOSUB]] {{{Parameter|lineLabel}}|{{Parameter|lineNumber}}}
 
+
: '''ON TIMER'''([{{Parameter|number%}},] {{Parameter|seconds!}}) { [[SUB]]procedure | [[GOSUB]] {{{Parameter|lineLabel}}|{{Parameter|lineNumber}}} }
<center>''QB64 Syntax #1:'' ON TIMER([''number%'',] ''seconds!'') GOSUB {''linelabel''|''linenumber''}</center>
 
<center>''QB64 Syntax #2:'' ON TIMER([''number%'',] ''seconds!'') SubProcedure [''parameter''[,...]]</center>
 
  
  
 
{{PageDescription}}
 
{{PageDescription}}
<center> '''QBasic Information''' </center>
+
===Legacy syntax===
 
+
* In the first syntax, the [[INTEGER]] {{Parameter|seconds%}} parameter can be from 1 to 86400 seconds (one day).
* In Qbasic the [[INTEGER]] ''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.
* A [[TIMER (statement)|TIMER ON]] statement must be made before an ON TIMER event is enabled in QB or QB64.
+
* [[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 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 (statement)|TIMER OFF]] disables timer event trapping. Events will not be remembered in a subsequent [[TIMER (statement)|TIMER ON]] statement.
* [[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.
* 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]].
* 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>
+
===QB64 syntax===
* Can use multiple numbered timer events and [[SINGLE]] floating point second values down to one millisecond(.001).
+
* '''QB64''' 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.
+
* The '''TIMER''' {{Parameter|number%}} must be obtained from the [[_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 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.
+
* 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).
* [[GOSUB]] or [[SUB]] procedures are allowed to be referenced, however [[CALL]] CANNOT be used.  
+
* [[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!'''
+
* '''[[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.
+
* 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]] 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 39: 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 73: Line 72:
  
 
{{PageSeeAlso}}
 
{{PageSeeAlso}}
* {{KW|TIMER}}, {{KW|_FREETIMER}}
+
* [[TIMER]], [[_FREETIMER]]
* {{KW|TIMER (statement)}}, {{KW|_DELAY}}, {{KW|_LIMIT}}
+
* [[TIMER (statement)]], [[_DELAY]], [[_LIMIT]]
* {{KW|$CHECKING}} (QB64 C++ {{KW|Metacommand}})
+
* [[$CHECKING]] {{text|(QB64 [[Metacommand]])}}
  
  
 
{{PageNavigation}}
 
{{PageNavigation}}

Latest revision as of 12:42, 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).
  • The TIMER number% must be obtained from the _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