ďťż

Ładny brzuch

Zrobiłem sobie klasę Timer w Visual C++, na podstawie opisu w książce Programowanie gier. Kompendium. Nie jest tam jednak opisane jak jej używać, więc postanowiłem spróbować sam.

Timer.h:
/* Timer.h - definicja klasy Timer */ #include <windows.h> #include <time.h> #pragma once class CTimer { protected: LARGE_INTEGER m_Czestotliwosc; LARGE_INTEGER m_Przeszlosc; LARGE_INTEGER m_Delta; tm* m_Time; public: CTimer(); ~CTimer(); void Aktualizuj (void); float PobierzDelta (void); unsigned long PobierzSekundy (); unsigned long PobierzMinuty (); unsigned long PobierzGodziny (); unsigned long PobierzDzien (); unsigned long PobierzMiesiac (); unsigned long PobierzRok (); };

Timer.cpp:
/* Timer.cpp - implementacja klasy */ #include "Timer.h" CTimer::CTimer () { QueryPerformanceFrequency (&m_Czestotliwosc); QueryPerformanceCounter (&m_Przeszlosc); } CTimer::~CTimer () { m_Czestotliwosc.QuadPart = 0; m_Przeszlosc.QuadPart = 0; } void CTimer::Aktualizuj () { LARGE_INTEGER Teraz; time_t TerazData; QueryPerformanceCounter (&Teraz); m_Delta.QuadPart = Teraz.QuadPart - m_Przeszlosc.QuadPart; m_Przeszlosc.QuadPart = Teraz.QuadPart; time (&TerazData); m_Time = localtime (&TerazData); } float CTimer::PobierzDelta () { return (float)(m_Delta.QuadPart) /  (float)(m_Czestotliwosc.QuadPart); } unsigned long CTimer::PobierzSekundy () { return m_Time->tm_sec; } unsigned long CTimer::PobierzMinuty () { return m_Time->tm_min; } unsigned long CTimer::PobierzGodziny () { return m_Time->tm_hour; } unsigned long CTimer::PobierzDzien() { return m_Time->tm_mday; } unsigned long CTimer::PobierzMiesiac() { return m_Time->tm_mon; } unsigned long CTimer::PobierzRok() { return m_Time->tm_year; }

Main.cpp:
/* Prób nowego Timera;) */ #include <iostream> #include "Timer.h" using namespace std; main (void) { CTimer Czas; Czas.Aktualizuj ();   if (Czas.PobierzDelta () > 10) {  cout << "ENTER" << endl;   } system("PAUSE"); return 0; }

Celem tego programu było wyświetlenie napisu ENTER, po 10 sekundach...
Ale nie działa :(
Nawet w pętle wkładałem i nic...
Pomocy! :unsure:



Ta klasa służy do sprawdzania ile trwało wykonanie jakiejś czynności, a nie odliczania czasu. Jej użycie jest bardzo proste, a funkcja PobierzDelta() podaje ci czas (w milisekundach) od poprzedniego wywołania funkcji Aktualizuj(). Tzn. możemy np sprawdzić ile trwało wykonanie jakiejś tam funkcji Foo().
Czas.Aktualizuj(); Foo(); //wywołujemy f-cję Foo Czas.Aktualizuj(); X = Czas.PobierzDelta();
Po takim zabiegu zmienna X będzie zawierała czas w jakim została wykonana funkcja Foo();

Można to wykorzystać do liczenia FPS'ów.
Użytkownik Futhark edytował ten post 26 listopad 2005, 22:44
Czyli to co stworzyłem to nie to o co mi chodziło... :(

Hmm... W takim razie może ktoś wie, gdzie można znaleźć jakiś kod, pomoc przy tworzeniu klasy Timer. Chodzi mi o to, żeby np. program wykonywał coś dopiero po upływie kilku sekund.

możesz użyć funkcji Sleep(1000); //w milisekundach podajsze
Pamiętaj dołączyć Windows.h
A jak chcesz tego timera używać to nie możesz użyć "tego ktory jest w systemie"(nie wiem jak to określić :P )



A może byś tak.... pomyślał?
To co stworzyłeś jak najbardziej nadaje się do odliczania czasu.

float x = 0.0f;
while(x < 10000.0f)
{
Czas.Aktualizuj();
x += Czas.PobierzDelta();
}
//z petli wyjdzie po uplywie 10000 milisekund [10 sekund]

I teraz zastanów się, dlaczego to działa.

Pozdrawiam,
TeMPOraL.
//Nie bluzgajcie mnie za takie porównywanie float'ów ;)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •