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

15.07.2003, 19:09

PeekMessage

Peek- oder GetMessage

Insgesamt 9 Stimmen

22%

PeekMessage mit while (2)

56%

PeekMessage mit if (5)

22%

GetMessage (2)

Hi,

Für meine Nachrichtenschleife verwende ich PeekMessage.
Allerdings hängt sich das komplette System dann immer für 10 Sekunden auf und dann läuft es wieder für ne halbe Sekunde und dann hängt sich es wieder für 10 Sekunden auf, usw... .

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
while(!bQuit)
    {
        while(PeekMessage(&stMessage, NULL, 0, 0, PM_REMOVE))
        {
            if(stMessage.message == WM_QUIT)
                bQuit = true;

            TranslateMessage(&stMessage);
            DispatchMessage(&stMessage);
        }

        RenderThings();
    }


Wenn ich Debugge hängt sich das System nicht auf, aber stMessage.message hat immer den Wert 275. Ich hab dann mal Spy++ nebenher laufen lassen und festgestellt, das dem Fenster ununterbrochen WM_ACTIVE und ab und zu ein paar andere Nachrichten gesendet werden. Was soll das?

Wenn ich das ganze so mache hängt sich nix auf, allerdings ist das nicht schön, weil Translate- und Dispatchmessage manchmal unnötig aufgerufen werden.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
while(!bQuit)
    {
        GetMessage(&stMessage, NULL, 0, 0)
        {
            if(stMessage.message == WM_QUIT)
                bQuit = true;

            TranslateMessage(&stMessage);
            DispatchMessage(&stMessage);
        }

        RenderThings();
    }


Wer kann mir helfen

2

15.07.2003, 20:00

Das ist vor allem deshalb nicht so schön, da GetMessage immer auf die Nachricht wartet. Wenn keine da ist, wartet GetMessage bis eine kommt. Ich verwende deshalb in meiner while-Schleife ein:

Quellcode

1
2
3
4
5
if(PeekMessage(...))
{
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
}

3

16.07.2003, 22:15

ja schön, aber mir gings eher um eine Antwort auf mein Problem.

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

4

17.07.2003, 11:51

Hmm ich verwende auch if(PeekMessage(...)).
Ich weiß jetzt net ob ich totalen Schwachsinn rede aber ist es nicht so das durch manche WM's ziemlich viele Messages gesendet werden... obwohl das bestimmt keine 10Secs ausmachen sollte.
Aber wenn du if benutzt dann wird eine Message verarbeitet und dann sofort gerendert... nächste Message.... rendern... usw. aber bei while werden vieleich erst 100 MSGs verarbeitet.
Vieleicht ist das Problem auch das sich ein Programm in den Vordergrund stellt und dann erst wieder dein Programm (immer abwechselnt) würde auch ne vielzahl an MSGs produzieren!

Aber alles nur vermutungen!
Ciao DarthB

5

18.07.2003, 18:20

hat sich erledigt, lag an etwas anderem.

CuTeX0r

Treue Seele

Beiträge: 174

Wohnort: Deutschland

  • Private Nachricht senden

6

18.07.2003, 21:08

darf man in etwa erfahren was? :angel: :rolleyes:

7

18.07.2003, 22:24

http://www.scherfgen-software.net/forum/viewtopic.php?t=531

Werbeanzeige