Aktuelle Zeit: 09.01.2025, 16:55

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: ITimer und andere Wurmlöcher
BeitragVerfasst: 07.05.2007, 12:47 
Offline

Registriert: 07.05.2007, 10:47
Beiträge: 10
Hallo,

Ich habe folgendes Phänomen in meinem Projekt (neben zig anderen :wink: ):

Code:
...
ITimer *timer;
timer = device->getTimer();
u32 now = 0;
u32 curr = 0;
while(device->run()) {

now = timer->getTime();
updatePhysics(); //ODE Physik SchnickSchnack
timer->tick();
curr = timer->getTime();

if(curr < now)
  std::cout << "WURMLOCH!!" << std::endl;
...
//Render Stuff
...
}


Geh ich was den Timer angeht von was falschem aus, oder ist das ein Problem mit X2 Dual Core? Die Differenz der beiden Werte liegt im Wurmloch-Fall bei ca. 1-3ms.

Danke,
KK


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007, 15:09 
Offline

Registriert: 12.04.2007, 11:47
Beiträge: 108
du solltest nicht tick() aufrufen
das mach das programm automatisch.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007, 15:28 
Offline

Registriert: 07.05.2007, 10:47
Beiträge: 10
Sudi hat geschrieben:
du solltest nicht tick() aufrufen
das mach das programm automatisch.


Das seh ich anders. Das Program macht das bei jedem device->run() Aufruf automatisch. Danach aber nicht mehr. Das bedeutet , dass ich innerhalb der while-Schleife immer die selbe Zeit bekomme wenn ich kein tick() aufrufe. Bin sogar im Moment davon überzeugt, das getestet zu haben.

Ich versuchs nochmal ohne tick(). Wenn Du Recht hast: Danke!
Wenn nicht komm ich wieder ;-)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007, 15:47 
Offline

Registriert: 07.05.2007, 10:47
Beiträge: 10
Also kann leider zur Zeit nicht Testen aber lesen.

Aus os.cpp:
Code:
u32 Timer::getTime()
   {
      if (isStopped())
         return LastVirtualTime;

      return LastVirtualTime + (u32)((StaticTime - StartRealTime) * VirtualTimerSpeed);
   }

   //! ticks, advances the virtual timer
   void Timer::tick()
   {
      StaticTime = getRealTime();
   }



Also so wie ich das sehe wird da nichts automatisch upgedated.

Gruß,
KK


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07.05.2007, 15:57 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
also um es mal so zu sagen: damit es sich auswirkt, ob der timer jetzt an der sekunde n oder n+1 steht, musst du eine framerate von < 1 haben... der timer rechnet nur in sekunden (zumindest der normale) und da brauchst du auch keine unterschiedlichen werte in der schleife, da diese schleife bei 30 frames auch 30 mal pro sekunde ausgeführt wird

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 08.05.2007, 13:46 
Offline

Registriert: 07.05.2007, 10:47
Beiträge: 10
Hi,

das ist nicht ganz das was ich mit dem Timer eigentlich bezwecken wollte. Wie könnte ich denn vorgehen, wenn ich sicher stellen möchte, dass ein bestimmer Programmteil (z.B. Physikteil) nur alle 10ms aufgerufen wird (Stichwort: fixed frequence game loop)? Mach ich das dann über die Framerate der letzten Sekunde?
Oder brauch ich dann doch noch einen Timer aus der Windows API oder wo auch immer her?

Schönen Gruß,

KK


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de