High Resolution Timing (translated by Pieterjan Vandegaer from Eyesight Development)

Dus, je bent geïntresseerd om je functies te laten reageren op bepaalde tijd intervals? Natuurlijk zou je het Timer Control kunnen gebruiken dat in VB zit. Spijtig genoeg heeft deze timer een resolutie van 55ms. 55ms lijkt een korte tijd voor ons maar voor de computer is het een ergelijk lange tijd. Laat je computer niet afzien! Gebruik exacte en hoge-resolutie timing methoden!

Private Declare Function GetTickCount Lib "kernel32" () As Long

Ik hou van deze functie. Wanneer ik ze voor het eerst tegenkwam was ik verbaasd. Waarom gebruikt VB deze simpele API aanroep niet wanneer ze hun Timer Control gemaakt hebben? Ik denk dat dit er een voor de X-files is, Mulder...

Hoedanook, deze functie geeft als waarde de lengte van de tijd dat het systeem al aan staat(in milliseconden). Omdat sommige computers vaak niet uitgezet worden voor enkele dagen na elkaar, moet je zeker een Long data type gebruiken en niet een Integer, anders kan je in de problemen geraken.

Om exact te bepalen hoeveel tijd gepasseerd is moeten we alleen de huidige TickCount opslaan in een variabele, en dan wachten totdat de gewenste tijd gepasseerd is:

TempTime = GetTickCount()

Do While DesiredTime > GetTickCount() - TempTime

'Zet je code hier

Loop

Hier hebben we een voorlopige variabele TempTime genoemd waardat we de TickCount in opslaan. We herhalen(loop) dan de statements die we willen uitvoeren totdat het verschil tussen de huidige tijd en de voorlopige opgeslagen tijd groter is dan de waarde van DesiredTime. We zouden hiervoor DesiredTime een waarde moeten geven met het aantal milliseconden, deze bepaald dan de lengte van de herhaling(loop).

Het voorbeeld hierboven toont hoe we we een code kunnen uitvoeren gedurende een bepaalde tijd. Hieronder is een voorbeeld van hoe je een code uitvoert telkens je interval gepasseerd is:


ExitFunction = False
TempTime = GetTickCount()

Do While not(ExitFunction)
    If DesiredTime > GetTickCount() - TempTime then
        'Herzet de voorlopige(TempTime)variabele
        TempTime = GetTickCount()
		
        'Zet je code hier
		
    End If
Loop

Deze functie zal de code uitvoeren elke keer de interval(bepaald door DesiredTime) gepasseerd is. Om de herhaling(loop) te verbreken, moet je gewoon een code er in zetten die de Boolean ExitFunctien op True zet.
Op deze manier kunnen we, bijvoorbeeld, er zeker van zijn dat onze graphics teken routines geen bepaalde frame rate overschrijden, of het verschil in snelheid tussen systemen te nihileren zodat je programma's op alle platformen gelijk lopen.

Ten laatste, de GetTickCount() functie can ook gebruikt worden om de snelheid van je code te testen. Hierbij bedoel ik dat je het kan gebruiken om te bepalen hoelang het duurt voordat een bepaalde stuk code uitgevoerd is, zo kun je het dan aanpassen om je programma op een optimale snelheid te laten draaien(of vertragen, als je dat wil). Ik heb een soort stopwatch programma geschreven dat demonstreert hoe je moet starten, stoppen, allemaal dankzij de glorieuze GetTickCount API aanroep. Bekijk de Files Pagina of klik hier om het nu te downloaden

Er werden geen computers gekwetst of gepijnigd tijdens het maken van deze tutorial in overeenkomst met de Geneva Conventie van 1949.