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

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

05.09.2010, 17:50

Verwendung der Zeit: "... bis keine Nachrichten mehr mehr in der Warteschlange sind."

Hallo.
Ich habe ein Problem :(

Ich habe mir ein kleines Pong-spiel gebastelt, dass aufs erste funktioniert :D
Das Problem: Ich verwende einen Render-timer -.-

Das das unter euch Pro-Programmierern ja so verpöhnt ist, versuchte ich, ein Spiel auf fTime-Basis zu programmieren
-> Also schön die Zeit verwenden :)

Allerdings hat die Sache einen Haken:
In Scherfgen's Buch steht [S.7, Listing 1.2; Hinweis 3] "3. Nachrichten abrufen (durch PeekMessage) und verarbeiten (mit den beiden Funktionen TranslateMessage und DispatchMessage), bis sich keine Nachrichten mehr in der Warteschlange befinden."

Mein Programm funktioniert :) Jedoch zeigt es nur ein Fenster an.
Das Problem ist einfach, dass es "ziemlich Nachrichtenhungrig" ist, also immer und immer wieder Nachrichten empfängt und verarbeitet.
Der Screen wird garnicht erst gerendert :(

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*

    [INFO]
    Listing zum Problem: https://www.spieleprogrammierer.de/index.php?form=ThreadAdd&boardID=17

    Variablen:

    -> Global:  float fTime
    -> Global:  DWORD t1, t2, tRes;
    -> Global:  MSG msg;
    ((-> Global:  (HWND hWnd)))
 */

// Nachrichtenschleife
ZeroMemory(&msg,sizeof(msg));

while(msg.message!=WM_QUIT)
    {
        t1=timeGetTime();
        while(PeekMessage(&msg,hWnd,0,0,PM_NOREMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        
        // DIESER Punkt wird NIE erreicht 
        // Das Programm läuft und läuft in der Nachrichtenschleife.. immer und immer weiter ??!
        // Mit PeekMessage(); und GetMessage();

        t2=timeGetTime();
        fTime=(float)(t2-t1)/1000.0f;
        RenderGame(hWnd,fTime);
    }


Achja, am Rande: BRAUCHT man ZeroMemory(); überhaupt ???

Wer helfen will bitte helfen :)
Lasst euch Zeit wenn ihr wollt ^^ Ich hab viel Zeit.

Danke
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

2

05.09.2010, 18:01

Ich hab ne Alternative Konstruktion gefunden :)

Trotzdem:

-> Wieso läuft diese Konstruktion bei mir nicht :_(
-> Braucht man ZeroMemory(); wirklich?

---
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

05.09.2010, 18:13

Wenn du PeekMessage mit PM_NOREMOVE verwendest wird die Nachricht nicht aus der Queue entfernt... ZeroMemory brauchst du dann wenn du einen definierten Zustand für msg willst.
@D13_Dreinig

4

05.09.2010, 20:21

Und ich glaube mal, wenn ich es richtig verstehe was du machen möchtest^^, dann berechnest du deine Zeit falsch.
Du willst doch wissen wie lange ein gesamter Durchlauf mit Rendering gedauert hat? Und nicht nur die Verarbeitung der Systemnachrichten?

Werbeanzeige