Programovanie makier v LibreOffice: Presnejšie stopky s funkciou GetSystemTicks()

LO.png Naučte sa vytvárať stopky. Je len na vás, či si vyberiete menej presné stopky s funkciou Timer() alebo viac presné s GetSystemTicks(), vďaka ktorej môžete precíznejšie zmerať beh nejakého procesu, výpočtu alebo celého programu.  

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

01pics.png

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

02pics.png

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

03pics.png

Č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

04pics.png

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

05pics.png

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

06pics.png

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

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 4
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz