Difference between revisions of "ON TIMER(n)"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>Clippy
m
Line 22: Line 22:
  
 
* Can use multiple timers and {{KW|SINGLE}} floating point second values down to one millisecond(.001).
 
* Can use multiple timers and {{KW|SINGLE}} floating point second values down to one millisecond(.001).
* If the TIMER number is omitted, the TIMER used is the base timer. That TIMER cannot be freed using TIMER[0] FREE. No number referance is used for that timer and keeps QB64 compatible with Qbasic.
+
* '''MUST use the {{KW|_FREETIMER}} function''' to assign free timer numbers. Use specific variables(or an array) for different TIMERs.
* Direct {{KW|SUB}} procedure calls are also allowed without using {{KW|CALL}}.
+
* If the TIMER number is omitted, the TIMER used is the base timer. That TIMER cannot be freed using TIMER[0] FREE. No number reference is used for the base timer and keeps QB64 compatible with Qbasic.
* Use the {{KW|_FREETIMER}} function to save free timer numbers to variables for TIMER statements.
+
* Direct {{KW|SUB}} procedure calls are also allowed '''without''' using {{KW|CALL}}.  
* TIMER(n) FREE releases a timer event after being turned off.
+
* '''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.
 
* '''QB64''' allows TIMER statements to also be inside of SUB and FUNCTION procedures.
 
* Does not currently interrupt {{KW|SLEEP}} calls.
 
* Does not currently interrupt {{KW|SLEEP}} calls.
* {{KW|$CHECKING}}:OFF can disable QB64 event checking. '''It should ONLY be used with errorless code that needs every CPU cycle!'''
+
* {{KW|$CHECKING}}:OFF can disable QB64 event checking. '''Use it ONLY with errorless code that needs every CPU cycle!'''
  
  
  
  
''Example:'' How to update the time while {{KW|PRINT|printing}} at the same time in a program.
+
''Example 1:'' How to update the time while {{KW|PRINT|printing}} at the same time in a program.
 
+
{{CodeStart}} '' ''
{{CodeStart}}
 
 
   TIMER ON ' enable timer event trapping
 
   TIMER ON ' enable timer event trapping
 
   LOCATE 4, 2 ' set the starting PRINT position
 
   LOCATE 4, 2 ' set the starting PRINT position
Line 48: Line 48:
 
   LOCATE 2, 37: PRINT {{Cl|TIME$}}; ' print current time at top of screen.
 
   LOCATE 2, 37: PRINT {{Cl|TIME$}}; ' print current time at top of screen.
 
   LOCATE row, col ' return to last print cursor position  
 
   LOCATE row, col ' return to last print cursor position  
  {{Cl|RETURN}}
+
  {{Cl|RETURN}} '' ''
 
{{CodeEnd}}
 
{{CodeEnd}}
 +
: NOTE: SLEEP will be interrupted in Qbasic.
 +
 +
 +
''Example 2:'' 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
  
: NOTE: SLEEP will be interrupted in Qbasic.
+
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}}
 
{{PageSeeAlso}}
 
 
* {{KW|TIMER}}, {{KW|_FREETIMER}}  
 
* {{KW|TIMER}}, {{KW|_FREETIMER}}  
 
 
* {{KW|TIMER (statement)}}, {{KW|_DELAY}}, {{KW|_LIMIT}}
 
* {{KW|TIMER (statement)}}, {{KW|_DELAY}}, {{KW|_LIMIT}}
 
 
* {{KW|$CHECKING}} (QB64 C++ {{KW|Metacommand}})
 
* {{KW|$CHECKING}} (QB64 C++ {{KW|Metacommand}})
 
 
  
  
 
{{PageNavigation}}
 
{{PageNavigation}}

Revision as of 19:09, 18 January 2011

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


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


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


Description

QBasic and QB64 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 normal program procedures.
  • Qbasic can only use one TIMER event at a time and code must be in the main code.
QB64 Specific Information
  • Can use multiple timers 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 TIMERs.
  • If the TIMER number is omitted, the TIMER used is the base timer. That TIMER cannot be freed using TIMER[0] FREE. No number reference is used for the base timer and keeps QB64 compatible with Qbasic.
  • Direct SUB procedure calls are also allowed without using CALL.
  • 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


See also



Navigation:
Go to Keyword Reference - Alphabetical
Go to Keyword Reference - By usage
Go to Main WIKI Page