Frage

Warum die PeekMessage-Anweisung ist erforderlich, bevor GetMessage () für die Erstellung von Message Queue?

War es hilfreich?

Lösung

Es ist nicht erforderlich.

Was Sie manchmal sehen, obwohl, ist ein Thread, der noch nicht bereit zu Prozessnachrichten, aber es will in der Lage sein, sie in seiner Nachrichtenwarteschlange zu empfangen. Neue Threads Nachrichtenwarteschlangen nicht sofort, aber PeekMessage Aufruf ist ausreichend, um die Nachrichtenwarteschlange zu erstellen. Es kehrt sofort zurück, da es keine Nachricht ist, und das erlaubt der Faden weiter selbst immer bereit. In der Zwischenzeit können andere Threads starten Nachrichten für den neuen Thread Schlange stehen. Sobald der neue Thread bereit ist, ruft sie GetMessage, um entweder die erste Nachricht aus der Warteschlange abzurufen, oder zu warten, bis eine Nachricht in die Warteschlange gestellt werden.

Andere Tipps

Es ist nicht. Die beiden Funktionen verschiedene Dinge tun.

PeekMessage (...) wartet nicht auf eine Nachricht angezeigt werden - es das erste man bekommt, wenn es da ist, das optional aus der Warteschlange entfernt und, kehrt aber falsch sofort gibt es nicht ein. Es ist häufiger bei Anwendungen, wo Sie einige Verarbeitung tun, während für Nachrichten warten, und kann nicht einfach da sitzen und warten immer auf die nächste Nachricht. Echtzeit-Spiele und so leicht in diese Kategorie fallen.

GetMessage (...) wartet bis es eine Nachricht, und bekommt sie. Es ist effizienter CPUwise, denn es ist nicht ständig Polling, aber es wird angehalten, wenn es keine Nachrichten gibt. Es ist häufiger bei formy Anwendungen und anderen Programmen, die nicht konstant in Echtzeit erfordern Verarbeitung los zu sein.

Es gibt mehrere Gründe für die Verwendung PeekMessage vor / statt GetMessage:

  1. Sicherstellung des Programms wird nicht hängen, bis eine Nachricht eintrifft - das ist ein wenig überflüssig ist, weil du direkt PeekMessage mit dem PM_REMOVE Flag verwenden, können die Nachrichtenwarteschlange abzufragen und auszulassen GetMessage zusammen.
  2. Mit der Funktion mit PM_NOREMOVE und zu entscheiden, ob Sie bearbeiten möchten, und / oder die Nachricht aus der Warteschlange zu entfernen, oder nicht.
  3. Beim IsWindowUnicode auf der Fenstergriff zurück Nachrichten und entweder PeekMessageA oder PeekMessageW auswählen.
  4. Mehrere der oben genannten.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top