11 votes

EnvoyerMessage vs PosterMessage + AttendreUnSeulObjet

Je me demandais quelle était la différence entre appeler SendMessage (qui bloque) et appeler PostMessage en conjonction avec WaitForSingleObject. Des idées ?

19voto

Jörgen Sigvardsson Points 3007

SendMessage() peut être refusé si vous l'appelez dans le contexte d'un appel COM, où l'objet COM vit dans un STA (les appels sont distribués à travers la pompe de messages). PostMessage() n'est pas soumis aux règles des appartements COM.

De plus, PostMessage() place le message à la fin de la file d'attente de messages de la fenêtre. SendMessage() contourne la file d'attente. Vous pouvez trouver une discussion plus approfondie sur les files d'attente de messages sur le blog de Raymond Chen The Old New Thing.

Mon point est qu'il y a plus de différences entre SendMessage() et PostMessage() qu'il n'y paraît. Je recommande vraiment de parcourir le blog de Raymond, car il a couvert de nombreuses erreurs au fil des ans.

4voto

Chris Points 19350

PostMessage et WaitForSingleObject vous permettent d'effectuer une messagerie asynchrone. Vous pouvez envoyer un message, faire d'autres choses, et vérifier plus tard pour une réponse. SendMessage est synchrone et nécessite que vous attendiez.

3voto

grayDad Points 314

J'ai toujours pensé que SendMessage appelle directement votre procédure windows, en contournant la file d'attente des messages ; tandis que PostMessage ajoute simplement le message à la file d'attente.

2voto

Seva Alekseyev Points 31812

SendMessage est un seul appel API, donc moins susceptible à vos erreurs. Optez pour la solution intégrée plutôt que de créer la vôtre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X