Menej presné stopky
Ak chceme zmerať čas, tak môžeme použiť funkciu Timer()
. Funkcia vracia počet uplynutých sekúnd od
nultej hodiny nového dňa.
Sub funkciaTimer Dim pocetSekund As Long pocetSekund = Timer() MsgBox pocetSekund & " sekúnd" End Sub
Pre správne zobrazenie sa odporúča použiť dátový typ Long
. Skúsme nedať žiadny dátový typ
v nasledujúcom programe.
Sub funkciaTimer pocetSekund = Timer() MsgBox pocetSekund & " sekúnd" End Sub
Hodnota, ktorú vracia funkcia Timer je v Date
. Takže ak vypíšete hodnotu, zobrazí sa vám udaj ako
dátum počítaný od 30. december 1899. Takže dávajte nato pozor, pretože výsledok funkcie Timer()
sa
tvári ako dátumová informácia, aj keď vracia počet sekúnd od 0:00.
Skúsme vypočítať nejaký príklad a odmerať čas výpočtu s pomocou funkcie Timer()
.
Sub funkciaTimer Dim cislo1,cislo2,cislo3 As Integer Dim vysledok As Integer Dim zaciatokStopky As Long Dim koniecStopky As Long Dim stopky As Long cislo1 = 5 cislo2 = 10 cislo3 = 24 zaciatokStopky = Timer() vysledok = cislo1 + cislo2 * cislo3 - 110 koniecStopky = Timer() stopky = koniecStopky - zaciatokStopky MsgBox "Výsledok prikladu "& cislo1 & "+" & cislo2 & "*" & cislo3 & "-110 = " & vysledok & Chr(10) & "Čas výpočtu: " & stopky & " sekúnd" End Sub
Čas výpočtu sme zmerali na 0 sekúnd. To znamená, že sa výpočet nevykonal? Samozrejme, že sa vykonal, len
rozlišovacia schopnosť funkcie Timer
je v sekundách. Nemôžeme merať časové úseky menšie ako
sekundy.
Presnejšie stopky
Keďže funkcia Timer()
vie merať len v sekundách a nie napr. v milisekundách, využijeme
presnejšie počítanie času s pomocou funkcie GetSystemTicks()
. Najprv sa s ňou zoznámime.
Sub funkciaGetSystemTicks pocetSekund = GetSystemTicks() MsgBox pocetSekund End Sub
Funkcia GetSystemTicks()
vracia časový interval od štartu operačného systému v milisekundách.
Návratová hodnota je dátového typu Long
. Odpadá tak kontrola, či to máme správne prevedené do dátového
typu Long
ako pri funkcii Timer()
.
Skúsme odmerať čas prebehnutia nášho výpočtu.
Sub funkciaGetSystemTicks Dim cislo1,cislo2,cislo3 As Integer Dim vysledok As Integer Dim zaciatokStopky As Long Dim koniecStopky As Long Dim stopky As Long cislo1 = 5 cislo2 = 10 cislo3 = 24 zaciatokStopky = GetSystemTicks() vysledok = cislo1 + cislo2 * cislo3 - 110 koniecStopky = GetSystemTicks() stopky = koniecStopky - zaciatokStopky MsgBox "Výsledok príkladu "& cislo1 & "+" & cislo2 & "*" & cislo3 & "-110 = " & vysledok & Chr(10) & "Čas výpočtu: " & stopky & " milisekúnd." End Sub
Niekedy je výpočet tak rýchly, že prebehne rýchlejšie ako za jednu milisekundu a preto nám napíše 0 milisekúnd.
Pri testovaní funkcie GetSystemTicks()
miesto výpočtu môžeme na nejaký čas zastaviť program. Toto
zastavenie dokáže príkaz Wait
. Jediným jeho argumentom je počet milisekúnd, na aký časový úsek má
program zastaviť.
Sub funkciaGetSystemTicks Dim zaciatokStopky As Long Dim koniecStopky As Long Dim stopky As Long zaciatokStopky = GetSystemTicks() Wait 500 koniecStopky = GetSystemTicks() stopky = koniecStopky - zaciatokStopky MsgBox "Čas behu programu: " & stopky & " milisekund." End Sub
Všimnite si, že počet milisekúnd pri použití príkazu Wait
nie je rovných 500. Musíte si uvedomiť, že
inicializácia príkazu Wait
a opätovné spustenie programu niečo trvá.
Námet na tento článok poslúžili tieto zdroje:
OpenOffice.org Macros Explained Third Edition, Andrew Pitonyak, page 137-138, dostupné online
Funkce Timer
, help.libreoffice.org, dostupné online
Funkce GetSystemTicks
, help.libreoffice.org, dostupné online
Příkaz Wait
, help.libreoffice.org, dostupné online