33. Čas: TIME, TIME$, PAUSE
Na čo to je
V kapitole 18 sa čakalo zápisom do adresy 20 a slučkou s PEEK. Turbo-BASIC XL má na hodiny Atari pohodlné slová: koľko času uplynulo a počkaj.
Ako sa to píše
| Zápis | Čo robí |
|---|---|
TIME | funkcia: počet päťdesiatin sekundy od zapnutia počítača |
TIME$ | funkcia: ten istý čas ako text HHMMSS – hodiny, minúty, sekundy |
PAUSE n | príkaz: počkaj n päťdesiatin sekundy |
Päťdesiatina sekundy je čas, za ktorý Atari nakreslí jeden obraz na televízore. PAUSE 50 je teda sekunda, PAUSE 25 pol sekundy, PAUSE 1 najkratšia možná prestávka.
Celý program
Súbor examples/time.tbas:
10 REM TIME, TIME$ and PAUSE
20 T=TIME
30 FOR I=1 TO 100:X=SQR(I):NEXT I
40 PRINT "A hundred square roots took ";(TIME-T)/50;" s"
50 PRINT "Since the start: ";TIME$
60 FOR N=3 TO 1 STEP -1
70 PRINT N
80 PAUSE 50
90 NEXT N
100 PRINT "Go!"Preklad a spustenie
Basic26 time.tbas --runHodiny v simulátore stoja, takže tento program patrí do emulátora: v simulátore by PAUSE nikdy neskončil.
Čo uvidíš
Na európskom Atari (PAL) toto:
A hundred square roots took 2.86 s
Since the start: 000003
3
2
1
Go!Medzi číslami 3, 2, 1 a Go! je vždy presne sekunda.
Ako to funguje
- Riadok 20: zapamätaj si čas na začiatku merania.
- Riadok 40: rozdiel
TIME-Tje počet päťdesiatin, ktoré medzitým ubehli; delené 50 sú to sekundy. Takto sa meria rýchlosť kusu programu – a porovnáva sa interpreter s preloženým programom. - Riadok 50:
TIME$má vždy šesť číslic:000003sú tri sekundy od zapnutia. Hodiny a minúty z neho vyberieš ako z každého reťazca – po priradení do premennejT$sú minútyT$(3,4). - Riadok 80:
PAUSE 50čaká sekundu, nech je počítač akokoľvek rýchly. Je to náhrada čakacej slučkyFOR W=1 TO 500:NEXT W, ktorá v preloženom programe trvá len zlomok toho, čo v interpreteri.
PAUSE v hre
Hlavná slučka hry potrebuje rovnomerné tempo. PAUSE 1 alebo PAUSE 2 na jej konci ju „prilepí“ na obraz televízora: pohyb je plynulý a rovnako rýchly v interpreteri aj v preloženom programe.
100 DO
110 EXEC MOVE_ALL
120 EXEC DRAW_ALL
130 PAUSE 2
140 LOOP
Stopky
10 PRINT "Press a key to start":GET K
20 T=TIME
30 PRINT "Press a key to stop":GET K
40 PRINT (TIME-T)/50;" seconds"Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
PAUSE bez čísla | error B26040: expected a value, found end of line – počet treba napísať |
PAUSE alebo čakanie na TIME v simulátore | program neskončí: instruction limit reached |
PAUSE 1 v dlhej slučke | tisíc prechodov je dvadsať sekúnd čakania |
TIME sa berie ako sekundy | sú to päťdesiatiny; del 50 |
premenná sa volá TIME | error B26017: a statement cannot start with TIME – je to meno funkcie |
| americké Atari (NTSC) | obraz sa tam kreslí 60-krát za sekundu, takže PAUSE 50 je o šestinu kratšia |
Vyskúšaj si
- Zmeraj, ako dlho trvá slučka
FOR I=1 TO 5000:NEXT I. - Napíš odpočítavanie od 10 do 0, pri nule pípni (
PRINT CHR$(253)). - Prepíš
sound.abasz kapitoly 21: podprogram na čakanie nahraď príkazomPAUSE.
Zhrnutie
TIMEje čas od zapnutia v päťdesiatinách sekundy,TIME$akoHHMMSS.PAUSE npočkánpäťdesiatin sekundy, presne a nezávisle od rýchlosti programu.- Rozdielom dvoch
TIMEsa meria, ako dlho niečo trvalo. - Hodiny bežia len v emulátore a na Atari, nie v simulátore.
Späť: 32. Hľadanie v texte a klávesy · Ďalej: 34. Bloky pamäte