| |
|
|
Sven Bader | Seit einiger Tiempo Yo el problema, dass &gettickcount y sleep sólo todavía en ca. 16 ms genau trabajo. In Kombination podría una Sleep 1 con folgendem Code 0 oder incluso 31 ms ausgeben!
Früher Tuve el problema no pero scheint auch no unnormal a ser. Entweder kam lo por una Windows-Actualización oder una BIOS-Einstellung (letztes voluntad Todavía validieren).
Mit timeBeginPeriod Yo una API-Función gefunden, welche el Auflösung de Sleep otra vez en zuverlässige 1 ms bringen kann. Der folgende Beispielquelltext verwendet Schleifen con je 100 Durchläufen, como &gettickcount después de como antes ungenau arbeitet.
Im Screenshot zeigt se el Diferencia, vermutlich es el todavía vorhandene Fehler de 0.79 ms en Bucle + API-Aufruf zurückzuführen.
Im besten Fall habt ihr en eurem Rechner en beiden Durchläufen el gleiche gute Ergebnis.
Declarar caps#, start&
Dim caps#,8'Temporizador Intervalle min/max auslesen
Decimals 2
Def timeGetDevCaps(2) !"winmm","timeGetDevCaps"
Def timeBeginPeriod(1) !"winmm","timeBeginPeriod"
Def timeEndPeriod(1) !"winmm","timeEndPeriod"
Ventana (%maxx * 0.5 - 250), (%maxy * 0.5 - 262) - 500,524
start& = &gettickcount
WhileLoop 100
Sleep 1
EndWhile
Imprimir "sleep 1 dauerte durchschnittlich: " + str$((&gettickcount - start&) * 0.01) + " ms"
timeGetDevCaps(caps#,8)'Auflösung des Timers anfragen (caps# = min ms, max ms)
Imprimir "\nSetze Temporizador-Auflösung en kleinstmöglichen Valor: " + str$(long(caps#,0)) + " ms \n"
timeBeginPeriod(long(caps#,0))'minimale Auflösung des Timers conjunto, como en manchen Systemen Sleep sonst sólo 15ms genau es!!
start& = &gettickcount
WhileLoop 100
Sleep 1
EndWhile
Imprimir "sleep 1 dauerte durchschnittlich: " + str$((&gettickcount - start&) * 0.01) + " ms"
timeEndPeriod(long(caps#,0))'zuvor gesetzte minimale Temporizador-Auslösung zurücksetzen
Disponer caps#
WaitInput
|
|
|
| |
|
|