Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.07.2007, 22:36

framebased rendering - Zeit verschenken

Hi,

da ich framebased rendering verwende benötige ich eine Funktion (aus der SDL, STL oder OpenGL) die entweder eine Milisekunde schläft oder automatisch dem Betriebsystem kurz Zeit "schenkt".
Mit Allegro ging das über rest(1) (um 1 ms zu warten) oder rest(0) (um dem System den Aufruf zu schenken)
SDL_Delay(unsigned int) ist leider zu ungenau...

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

2

22.07.2007, 22:46

Das einzige was es nocht gibt ist Sleep(unsigned int TIME) http://msdn2.microsoft.com/en-us/library/ms686298.aspx. Ist aber auch relativ ungenau. Denn du sagst dem Betriebbsystem ja nur, dass du einen Prozess für mindestens TIME schlafen legen willst, es kann aber durchaus sein, dass er wesentlich länger "schlafen" gelegt wird.
Genauer gehts leider kaum, da der Scheduler vom Betriebbsystem eben so arbeitet. Da gibts auch auf http://gamedev.net schon ein paar relativ ausführliche Threads dazu.

mfg Philipp

3

22.07.2007, 22:48

No, no. I said SDL, STL or OpenGL. Not WinAPI!

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

4

22.07.2007, 22:55

Zitat von »"tobb"«

No, no. I said SDL, STL or OpenGL. Not WinAPI!

Ah sorry.

Aber dann wirds da nix geben schätz ich mal.

SDL: wüsste nicht dass es sowas gibt
STL: das gleiche wie bei SDL
OpenGL: da gibts sowas mit ziemlich großer Sicherheit nicht, ist ja eine Grafik-API

Das Problem ist halt, dass das Process-Scheduling Aufgabenbereich des Betriebssystems ist. Daher würde ich eben Sleep oder das demensprechende Linux-Pedant nehmen, auch Allegro wird es auf diese Art und Weise gemacht haben (vermute ich).

mfg Philipp

5

22.07.2007, 22:57

Nein, ein rest(0) (<- eine Funktion aus Allegro) hat nicht mal eine Millisekunde verbaucht, aber die CPU Nutzung des Programms ging drastisch runter... war also ideal.
Ein SDL_Delay(0) schläft aber leider schon mal 6ms und ein SDL_Delay(1) hat sogar mal ganze 11ms verschalfen... tödlich...

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

6

23.07.2007, 00:09

erklär mir bitte doch mal, was du unter framebased rendering verstehst.
ich kann mir nämlich nicht vorstellen, dass du unbedingt dafür dein programm "schlafen legen" musst.
würde das nicht auch mit einem timer gehen?
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

7

23.07.2007, 00:23

Du kannst allgemein usleep nehmen und unter Win32 Sleep. Das sollte m.E. unter Linux, Unix, Irix, MacOS und BeOS, und wahrscheinlich auch anderen Betriebssystemen laufen.
"Games are algorithmic entertainment."

8

23.07.2007, 01:31

Whats usleep? Standard C++?

framebased rendering:
In dem man die FPS festsetzt kann man Bewegungen leichter berechnen (also wieviel Pixel muss jetzt Figur A in x Richtung...), da man immer die gleiche Zeit vertreichen lässt...
Auf schnellen Rechnern ist das auserdem noch sehr, sehr, CPU, Strom und wärme sparend (gut für Laptops)...

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

9

23.07.2007, 01:46

das schreit doch schon nach einem timer!
"Don't trust your eyes: They are a hell of a lot smarter than you are"

10

23.07.2007, 01:48

Was meinst du damit?

Werbeanzeige