mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 09:05:08 +00:00
79 lines
4.2 KiB
Text
79 lines
4.2 KiB
Text
The [[ON_TIMER(n)|ON TIMER]] statement sets up a timed event to be repeated at specified intervals throughout a program when enabled.
|
|
|
|
|
|
{{PageSyntax}}
|
|
: '''ON TIMER'''({{Parameter|seconds%}}) [[GOSUB]] {{{Parameter|lineLabel}}|{{Parameter|lineNumber}}}
|
|
: '''ON TIMER'''([{{Parameter|number%}},] {{Parameter|seconds!}}) { [[SUB]]procedure | [[GOSUB]] {{{Parameter|lineLabel}}|{{Parameter|lineNumber}}} }
|
|
|
|
|
|
{{PageDescription}}
|
|
===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===
|
|
* '''QB64''' can use multiple numbered timer events and [[SINGLE]] floating point second values down to one millisecond (.001).
|
|
* 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 {{InlineCode}}'''ON TIMER'''(0, {{Parameter|seconds!}}){{InlineCodeEnd}} 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 (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.
|
|
** 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.
|
|
|
|
|
|
{{PageExamples}}
|
|
''Example:'' Using a numbered TIMER to check the mouse button press status in '''QB64'''.
|
|
{{CodeStart}} '' ''
|
|
{{Cl|DIM}} {{Cl|SHARED}} Button {{Cl|AS}} {{Cl|LONG}} 'share variable value with Sub
|
|
|
|
t1 = _{{Cl|TIMER (statement)|FREE}}{{Cl|TIMER}} 'get a timer number from _FREETIMER ONLY!
|
|
{{Cl|ON TIMER(n)|ON TIMER}}(t1, .05) MouseClick
|
|
{{Cl|TIMER}}(t1) ON
|
|
|
|
DO
|
|
{{Cl|LOCATE}} 1, 1
|
|
{{Cl|IF...THEN|IF}} Button {{Cl|THEN}}
|
|
{{Cl|PRINT}} "Mouse button"; Button; "is pressed.";
|
|
{{Cl|ELSE}} {{Cl|PRINT}} {{Cl|SPACE$}}(70)
|
|
{{Cl|END IF}}
|
|
{{Cl|_DISPLAY}}
|
|
{{Cl|LOOP}} {{Cl|UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}(27)
|
|
{{Cl|TIMER}}(t1) {{Cl|OFF}}
|
|
{{Cl|TIMER}}(t1) {{Cl|TIMER (statement)|FREE}} 'release timer
|
|
{{Cl|END}}
|
|
|
|
{{Cl|SUB}} MouseClick
|
|
{{Cl|DO...LOOP|DO}} {{Cl|WHILE}} {{Cl|_MOUSEINPUT}}
|
|
{{Cl|IF...THEN|IF}} {{Cl|_MOUSEBUTTON}}(1) {{Cl|THEN}}
|
|
{{Cl|COLOR}} 10: Button = 1
|
|
{{Cl|ELSEIF}} {{Cl|_MOUSEBUTTON}}(2) {{Cl|THEN}}
|
|
{{Cl|COLOR}} 12: Button = 2
|
|
{{Cl|ELSE}} Button = 0
|
|
{{Cl|END IF}}
|
|
{{Cl|LOOP}}
|
|
{{Cl|END SUB}} '' ''
|
|
{{CodeEnd}}
|
|
|
|
|
|
{{PageSeeAlso}}
|
|
* [[TIMER]], [[_FREETIMER]]
|
|
* [[TIMER (statement)]], [[_DELAY]], [[_LIMIT]]
|
|
* [[$CHECKING]] {{text|(QB64 [[Metacommand]])}}
|
|
|
|
|
|
{{PageNavigation}}
|