olen käyttänyt timeGetTime funktiota kuluneen aikadeltan mittaukseen FPS-limitteriä varten mutta jostain syystä
Sleep(timeDelta)
tyyppinen ratkaisu on tosi epätarkka ohjelman stallaamiseen.
Olen myös asettanut minimresoksi 1ms
timeBeginPeriod( wTimerRes );
-funkkarilla, mutta jostain syystä se sotkee ton sleepin toimintaa vielä enemmän.
olen myös kokeillut tän tapaista stallaamista...
const unsigned int t = timeGetTime(); while( true ) { //vapauta threadin timeslice, varm vuoksi 10 iteraatiota for ( int r = 0; r < 10; r++ ) Sleep( 0 ); const int d = (timeGetTime() - t); //1ms sleep cpu-ajan säästöön (jos kaikki ois Sleep(0) vie ohjelman suoritus 100% cpu tehoa if ( d == requestedSleep ) Sleep( 1 ); if ( d > requestedSleep ) break; }
onko jollain mitään ideaa ton tarkentamiseen. noi timeGetTime() kutsut tuntuu antavan ihan ok arvoja mutta toi sleep ei pysäytä ohjelman suoritusta tarpeeks pitkäksi aikaa. Vsyncillä homma kyllä toimii oikein mutta olis kiva saada se toimimaan ilmankin vsynciä.
ja QueryPerformanceCounteria ei voi käyttää kun se ei toimi dualcoreilla.
koneena on 3ghz p4 ja XP SP 2.
Hm, mitenkäs tuo meneekään, käsittääkseni MS suosittelee, että ajastusperiodi olisi käynnissä vain sen aikaa kun sitä käytetään. Tulikohan tästä sitten merkittävä hidaste ohjelmalle, vai miksi minä itse päädyin rikkomaan tätä ohjetta, en muista... No mutta jos kuitenkin testaisit sitä konstia, eli timeEndPeriod ennen Sleep-kutsua. Tietysti tuokin voi toimia tuo purkka:
sleepin_lopetus = ...; while (timeGetTime() < sleepin_lopetus) Sleep(1);
Mikä siinä nyt oikeastaan edes oli vikana (paitsi että se on purkka)?
itse asiassa pistin timeBeginPeriod() ennen main looppia ja timeEndPeriod() mainloopin jälkeen
ilman tota timeBeginPeriod() kutsua saan ton nyt pyörimään n. 64 fps kun tavoitteena olisi 60fps. muuten tuo nopeus on ok mutta ongelmana on se että toi sleep tuntuu hyppivän n 0-10ms välillä, muistaaksen 10ms on XP:ssä natiivireso tolle timerille, joten vsyncin kanssa saavutettua smoothia fiilistä ei sitteen saa varmaan kovin helposti...
tossa muuten kuvia tosta projektista (toimiikohan tää linkki)
http://www.shmup-dev.com/forum/index.php?action=dlattach;topic=872.0;attach=435;image
http://www.shmup-dev.com/forum/index.php?action=dlattach;topic=872.0;attach=437;image
joo ei linkit näk. toimi jos ei oo rekannu tonne foorumille :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.