Die GetMessage Funktion verursacht mir enormen Prozessorlast



  • Hallo! Meine Win32 Applikation scheint sehr viel Prozessorleistung zu brauchen. Das passiert egal ob irgendwelche Messages behandelt werden oder auch wenn der Benutzer nicht mit dem window macht. Das stört mich schon, aber wie kann ich die Message loop so schreiben, dass es nur im Fall eines Message zu arbeiten, wenn keine solche vorhanden ist - einfach nichts tun und den Prozessort entlasten?



  • dann ist wohl dein computer kaputt, denn GetMessage arbeitet doch genau so wie du es dir wünscht



  • Muß wohl an Deiner Programmierung liegen. Wenn keine Nachricht ankommt und das Prog sonst nichts zu rechnen hat, schaltet Windows die Rechenzeit für das Prog auf Sparflamme, dann sollte es eigentlich fast gar keine Porzessorleistung verbrauchen.



  • Redest Du wirklich nur von GetMessage() ?
    D.h. liegt keine Verwechslung mit PeekMessage() vor?

    Ansonsten, zeig hier mal Deine Message-Schleife.

    Martin



  • Hmm. Kann das Problem sein wegen Debugversion? Ich habe dual-core Prozessor. Der Task manager zeigt mir etwa 40-50% Prozessorlast für mein Programm. Aber wie gesagt - es wird durch die M$VC debugged.
    Die Quellcode ist recht standartiesiert - nichts besonderes. Ich zeige sie hier, wenn ich nach Hause komme.


  • Mod

    GetMessage kann selbst keine Prozessorlast auslösen. Wenn GetMessage "scheinbar" das System belastet, dann gibt es vermutlich einfach eine Menge Nachrichten. Schmeiß mal den Spy++ an.

    Hast Du einen Timer, der das System so belastet. Timer werden in GetMessage ausgleöst.

    Oder Du hast einen Mechanismus der permanent Nachrichten auslöst mit PostMessage.



  • ich tipp mal drauf, dass du beginpaint() und endpaint() vergessen hast. waere das moeglich ? 😉



  • Spy++? Was ist das? Hab es mal in der Zubehörsektion gesehen. Wozu dient das?

    Bis jetzt benutze ich keine Timers.

    Ich muss gestehen, dass ich einen Objekt-orientierten Mechanismus benutze - und zwar den MVC-Design Pattern. Ich wurde von : http://www.relisoft.com/win32/generic.html inspiriert. Aber PostMessage oder irgendwelche andere Arten von Mitteilungen benutze ich noch nicht.

    @hoooooooooorscht, ähmmm... ich denke dass ich nichts falsches gemacht habe...

    case WM_PAINT:
    BeginPaint(...);
    EndPaint(...);
    return 0;
    

    Die obengezeigte Code zeichnet nichts aber Paar begin/end-paint ist vorhanden und es sollte auch funktionieren. Kann das Problem sein, dass ich die WM_PAINT in MDIFrame behandle?


  • Mod

    Spy++ ist ein Tool aus dem Visual Studio (ist IMHO auch als SDK Tool vorhanden), man kann damit Windows Nachrichten "ausspähen", sprich loggen.



  • Martin Richter schrieb:

    Spy++ ist ein Tool aus dem Visual Studio (ist IMHO auch als SDK Tool vorhanden), man kann damit Windows Nachrichten "ausspähen", sprich loggen.

    Spy++ hat mich wirklich sehr geholfen den Fehler zu identifizieren. Es werden ständig WM_PAINT Mitteilungen geschickt, mit hdc=0. Jetzt muss ich verstehen warum das so passiert...

    Einfach fantastisch! Ich habe den Fehler entdeckt und korrigiert. Und diesen Tool Spy++ finde ich einfach geil! Das Problem war, dass ich BeginPaint/EndPaint bzg. des Child-Client Handle versuchte, und nicht bzg. des Frame-Handle...


Anmelden zum Antworten