Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kod wykonujący się 'n' razy na sekundę

Ostatnio zmodyfikowano 2011-07-22 13:03
Autor Wiadomość
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
P-36419
m4tx
» 2011-07-21 11:14:34
Hmmmm... Może użyjesz timerów?

Dałbyś interwał 1000ms/60 i po problemie.
P-36420
hixohe
» 2011-07-21 11:16:58
Witam,

Pokaż kod będzie łatwiej coś doradzić.
P-36421
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).
P-36422
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.
P-36425
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.
P-36431
m4tx
» 2011-07-21 12:39:26
Za pomocą sf::Clock powinieneś móc sobie zrobić własnego timera.
P-36434
szyx_yankez
» 2011-07-21 12:45:33
C/C++
int n = 60;
int tim = GetTime(); //funkcja zwracająca czas(milisekundy) np. od uruchomienia programu, funkcje zaimplementuj sam używając funkcji z rodziny QueryPerformance,
//while
if( tim +( 1000 / 60 ) >= GetTime() )
{
    //kod, wykonywany z daną szybkością 60x/s.
    tim = GetTime();
}

//Edit: Akurat dobrze się składa bo rozwiązanie znajduje się w kodzie GoldWolf'a.
P-36437
« 1 » 2
  Strona 1 z 2 Następna strona