Ich Frage mich, was ist der Unterschied zwischen SendMessage-Aufruf (die Blöcke) und den Aufruf von PostMessage in Verbindung mit WaitForSingleObject.
Gedanken?
Wenn Sie möchten, Synchronizität Aufruf von SendMessage.
InformationsquelleAutor Filip Frącz | 2011-07-21
SendMessage()
verweigert werden kann, wenn Sie es nennen) im Kontext einer COM-Aufruf, wo das COM-Objekt lebt in einem STA (Anrufe ausgelöst werden durch das Nachrichtensystem).PostMessage()
beschränkt sich nicht auf die Einhaltung von COM-apartment-Regeln.Auch
PostMessage()
stellt die Nachricht in das Ende des Fensters message queue.SendMessage()
umgeht der Warteschlange. Sie finden eine längere Diskussion über message queues auf Raymond Chen blog "The Old New Thing.Mein Punkt ist, dass es mehr um den Unterschied zwischen
SendMessage()
undPostMessage()
als das Auge. Ich wirklich empfehlen, werde durch Raymond ' s blog, wie er gedeckt hat viele Fallstricke, über die Jahre.InformationsquelleAutor Jörgen Sigvardsson
PostMessage
undWaitForSingleObject
erlauben asynchrone Kommunikation. Sie können eine Nachricht senden, andere Dinge zu tun, und überprüfen Sie zurück für eine Antwort später.SendMessage
ist synchron und erfordert Sie, zu warten.+1 für die Hervorhebung der wichtigsten operativen Unterschied - PostMessaging einer Veranstaltung und wartet auf Sie ermöglicht es dem Anrufer um die Verarbeitung fortzusetzen. Dies kann nützlich sein, wenn das Ziel ist, zu warten, zu einem späteren Zeitpunkt in den thread-Verarbeitung, bis einer vorherigen Nachricht geschrieben wurde vollständig abgewickelt, die in den GUI-thread.
InformationsquelleAutor Chris Eberle
Ich habe immer gedacht, dass die SendMessage-Aufrufe Ihre windows-Prozedur direkt, das überspringen der message-queue; während PostMessage nur fügt die Nachricht in die Warteschlange.
InformationsquelleAutor grayDad
SendMessage ist ein einfacher API-Aufruf, daher weniger anfällig für Ihre Fehler. Gehen Sie mit der integrierten anstatt Ihre eigenen Rollen.
"Semantik" sind für Natürliche Sprachen. Code ist das, was code tut nicht was es soll bedeuten.
Nein, Semantik erleichtert die Lesbarkeit des Codes, self-Dokumentation und die Einhaltung von API-Verträgen. Nur weil der code funktioniert jetzt etwas, bedeutet nicht, es immer weiter zu tun, die gleiche Sache. Und nur weil der Entwickler weiß, was der code tut, bedeutet nicht, dass die späteren Betreuer wissen, warum du etwas getan hast, in einem völlig nicht-offensichtliche, unintuitive Weise.
"Code ist, was der code funktioniert nicht, was soll es bedeuten" Das Thema hier ist "SendMessage" und "PostMessage", die symbolischen Bezeichnungen, die Semantik. Ignorieren Semantik und darauf, nur in der Umsetzung ist die unfähigsten Vorstellung, dass ein Programmierer möglicherweise haben könnte.
InformationsquelleAutor Seva Alekseyev