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

Anonymous

unregistriert

1

15.07.2004, 11:50

Hauptschleife wird nicht beendet ???

Hallo,

ich habe ein Problem. Immer wenn ich mein Programm ausführe, dann betritt es zwar die Hauptschleife, bleibt aber dort hängen. Hier der Code der Hauptschleife:



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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
CCT3D_API CCT3D_Result CCT3D_MessageLoop(CCT3D_Result (* pMoveProc)(float),
                                         CCT3D_Result (* pRenderProc)(float))
{
    MSG         Message;        // Nachricht

    LONGLONG    llStartTime;    // Startzeitpunkt

    LONGLONG    llEndTime;      // Endzeitpunkt

    double      dTime;          // Zeitspanne in Sekunden

    BOOL        bRun = TRUE;


    INFO("Nachrichtenschleife wird betreten...");
    ZeroMemory(&Message, sizeof(MSG));

    // Nachrichtenschleife

    dTime = 0.0;
    while(bRun)
    {
        // Startzeitpunkt messen

        QueryPerformanceCounter((LARGE_INTEGER*)(&llStartTime));

        // Nachrichten verarbeiten

        while(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&Message);
            DispatchMessage(&Message);

            if(Message.message == WM_QUIT)
            {
                // Schleife verlassen!

                bRun = FALSE;
            }   
        }

        if(CCT3D_g_bAppActive)
        {
            // Die Sekunden seit dem letzten Frame speichern

            CCT3D_g_dNumSecsPassed = dTime;

            // Bewegungen durchführen, falls gewünscht

            if(pMoveProc != NULL)
            {
                if(dTime == 0.0)
                {
                    QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime));
                    if(llEndTime == llStartTime) dTime = 0.0001;
                    dTime = (float)(llEndTime - llStartTime) / CCT3D_g_dFrequency;
                }

                if(pMoveProc((float)(dTime)) == CCT3D_STOP) break;
            }

            // Spielzustand zeichnen, falls gewünscht

            if(pRenderProc != NULL) if(pRenderProc((float)(dTime)) == CCT3D_STOP) break;

            // Endzeitpunkt messen und Anzahl der vergangenen Sekunden berechnen

            QueryPerformanceCounter((LARGE_INTEGER*)(&llEndTime));
            if(llEndTime == llStartTime) dTime = 0.0001;
            else dTime = (float)(llEndTime - llStartTime) / CCT3D_g_dFrequency;

            // Zeitzähler erhöhen

            CCT3D_g_fTime += (float)(dTime);
        }
    }

    INFO("Nachrichtenschleife beendet!");

    return CCT3D_OK;
}


Ich kann das Programm erst im TaskManager wieder beenden. Kann mir jemand helfen ?

Ciao,
Niko[/cpp]

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

15.07.2004, 12:24

C-/C++-Quelltext

1
2
3
4
5
           if(Message.message == WM_QUIT) 
            { 
                // Schleife verlassen! 

                bRun = FALSE; 
            }    

Das setzt voraus das du ein Fenster erstellt und dieses schließt oder per sendMessage die WM_QUIT Nachrricht verschickst. Sonst ist das eine Endlosschleife.

Anonymous

unregistriert

3

15.07.2004, 12:57

Wie meinst du das ? Ich erstelle ein Fenster mit der Initialisation von DX 9, also in einer Funktion. Meinst du ich soll dort wo er aus der Schleife ausbricht, das Fenster schließen ?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

15.07.2004, 13:06

Hmm du hast also ein Fenster....was passiert wenn du es schließt?

Anonymous

unregistriert

5

15.07.2004, 13:16

Ich gebe dir mal ein Teil des Codes, dann kannst du dir den angucken.
Es passiert ja nix.....das Programm bleibt geöffnet. Hier der .http://optionoverkill.de/~gameprogrammer/Source.rar]Code[/url]

Anonymous

unregistriert

6

15.07.2004, 13:17

Oh sorry das ist der Link http://optionoverkill.de/~gameprogrammer/Source.rar

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

15.07.2004, 13:23

AHHH sry ganz fett sorry.
Ich bin gerade über die entscheidenen Funktion gestolpert. Sie lautet PostQuitMessage(). Diese einfügen und es funzt.

Anonymous

unregistriert

8

15.07.2004, 13:27

Ne sorry geht immer noch nicht.... :crying:

Werbeanzeige