| |
|
|
Sven Bader | depuis einiger Zeit habe je cela Problem, dass &gettickcount et sleep seulement encore sur ca. 16 ms oui c'est ca travailler. dans Kombination konnte un Sleep 1 avec folgendem Code 0 ou bien sogar 31 ms ausgeben!
Früher J'ai eu cela Problem pas mais es scheint aussi pas unnormal trop son. Entweder kam es par un Windows-Update ou bien une BIOS-Einstellung (letztes werde je encore validieren).
avec timeBeginPeriod habe je une API-Funktion trouvé, quelle qui Auflösung de Sleep wieder sur zuverlässige 1 ms apporter peux. qui folgende Beispielquelltext verwendet Schleifen avec je 100 Durchläufen, là &gettickcount pour comment avant ungenau arbeitet.
Im Screenshot zeigt sich qui Unterschied, probablement ist qui encore vorhandene faute de 0.79 ms sur Boucle + API-Aufruf zurückzuführen.
Im besten le cas avez son sur eurem calculateur chez beiden Durchläufen cela gleiche gute Ergebnis.
Déclarer caps#, start&
Faible caps#,8'Minuteur Intervalle min/max auslesen
Decimals 2
Def timeGetDevCaps(2) !"winmm","timeGetDevCaps"
Def timeBeginPeriod(1) !"winmm","timeBeginPeriod"
Def timeEndPeriod(1) !"winmm","timeEndPeriod"
Fenêtre (%maxx * 0.5 - 250), (%maxy * 0.5 - 262) - 500,524
start& = &gettickcount
WhileLoop 100
Sleep 1
Endwhile
Imprimer "sleep 1 dauerte durchschnittlich: " + str$((&gettickcount - start&) * 0.01) + " ms"
timeGetDevCaps(caps#,8)'Auflösung des Timers anfragen (caps# = min ms, max ms)
Imprimer "\nSetze Minuteur-Auflösung sur kleinstmöglichen Wert: " + str$(long(caps#,0)) + " ms \n"
timeBeginPeriod(long(caps#,0))'minimale Auflösung des Timers mettons, là sur manchen Systemen Sleep sonst seulement 15ms oui c'est ca ist!!
start& = &gettickcount
WhileLoop 100
Sleep 1
Endwhile
Imprimer "sleep 1 dauerte durchschnittlich: " + str$((&gettickcount - start&) * 0.01) + " ms"
timeEndPeriod(long(caps#,0))'zuvor gesetzte minimale Minuteur-Auslösung zurücksetzen
Dispose caps#
WaitInput
|
|
|
| |
|
|