Kod wykonujący się 'n' razy na sekundę
Ostatnio zmodyfikowano 2011-07-22 13:03
WiecznyWem Temat założony przez niniejszego użytkownika |
Kod wykonujący się 'n' razy na sekundę » 2011-07-21 10:57:05 Witam.
Mam pewien problem mianowicie, chcę aby pewien kod wykonywał się n razy na sekundę. Uwaga, jest bardzo istotne to, aby nie wykonywało się wszystko na początku pętli, a potem czekało aż minie sekunda, tylko było to wykonywanie rozłożone na całą sekundę. Nie za bardzo wiem jak się do tego zabrać(obsługę czasu znam, tylko nie wiem jak rozwiązać ten problem). O i jeszcze jedna bardzo ważna rzecz - główna pętla na sekundę robi ~60 obejść, a n często będzie większe od 60.
Pozdrawiam, Andrzej |
|
m4tx |
» 2011-07-21 11:14:34 Hmmmm... Może użyjesz timerów?
Dałbyś interwał 1000ms/60 i po problemie. |
|
hixohe |
» 2011-07-21 11:16:58 Witam,
Pokaż kod będzie łatwiej coś doradzić. |
|
WiecznyWem Temat założony przez niniejszego użytkownika |
» 2011-07-21 11:29:04 To jest tak, że tworzę system cząsteczkowy, i chcę aby na sekundę dodawało się n cząsteczek. Rozłożone mam to już na klasy, i trochę tego jest, więc ciężko będzie pokazać kod, ale: -w klasie (particle) system mam funkcję Update(double dt)//dt to delta -funkcja ta uaktualnia cały system, w tym ma również dodawać nową cząstkę -nową cząstkę dodaje się poleceniem AddParticle() -funkcja Update(double dt) wykonywana jest tyle razy ile główna pętla
Aktualnie kombinowałem z zegarami z SFML, ale jeżeli nie wystarczą, to można się przerzucić na ctime.
Potrzeba wymyślić warunek(albo raczej pętelkę) którą mógłbym wsadzić na początek funkcji Update, która zajmowała by się dodawaniem tych cząstek. Kłopot w tym, że nie mam zielonego pojęcia, jak mogę zapisać taką pętle(jej warunek).
|
|
szyx_yankez |
» 2011-07-21 11:57:55 Czemu główna pętla robi Ci 60 obejść/s?
Robisz osobny timer do grafiki i osobny do obliczeń i po problemie. |
|
WiecznyWem Temat założony przez niniejszego użytkownika |
» 2011-07-21 12:32:29 Wszystko fajnie, tyle że jak napisać taki timer? Nie piszę w allegro, gdzie timery są wbudowane. Nie wiem, może to ma jakąś inną nazwę? Google nic nie mówi konkretnego. |
|
m4tx |
» 2011-07-21 12:39:26 Za pomocą sf::Clock powinieneś móc sobie zrobić własnego timera. |
|
szyx_yankez |
» 2011-07-21 12:45:33 int n = 60; int tim = GetTime();
if( tim +( 1000 / 60 ) >= GetTime() ) { tim = GetTime(); } //Edit: Akurat dobrze się składa bo rozwiązanie znajduje się w kodzie GoldWolf'a. |
|
« 1 » 2 |