Pourquoi l'instruction PEEKMESSAGE est requise avant GetMessage () pour la création de la file d'attente de message? P>
3 Réponses :
Ce n'est pas nécessaire. P>
Ce que vous verrez parfois, cependant, est un fil qui n'est pas encore prêt à traiter des messages, mais il veut pouvoir les recevoir dans sa file d'attente de message. Les nouveaux threads ne disposent pas de files d'attente de messages tout de suite, mais appelant PeekMessage code> suffit pour créer la file d'attente de message. Il revient immédiatement car il n'y a pas de message et permet au fil de continuer à se préparer. Entre-temps, d'autres threads peuvent commencer à faire la queue de messages pour le nouveau fil. Une fois que le nouveau thread est prêt, il appelle
getMessage code> pour extraire le premier message de la file d'attente ou pour attendre qu'un message soit mis sur la file d'attente. P>
Ce n'est pas. Les deux fonctions font des choses différentes. P>
PeekMessage (...) n'attend pas qu'un message apparaisse - il obtient le premier si c'est là, en le retirant éventuellement de la retirer de la file d'attente, mais retourne faux immédiatement il n'y en a pas. Il est plus courant dans les applications où vous faites un certain traitement en attendant des messages et que vous ne pouvez pas simplement rester là et attendre pour toujours pour le prochain message. Les jeux en temps réel et sont aussi facilement tomber dans cette catégorie. P>
getMessage (...) attend jusqu'à ce qu'il y a un message et l'obtient. C'est plus efficace de CPUWise, car il ne sondre pas constamment, mais cela pause s'il n'y a pas de messages. Il est plus courant dans les applications de formay et d'autres programmes qui ne nécessitent pas de traitement en temps réel constant. P>
Voici une autre référence, qui note que ce n'est pas nécessairement le moyen le plus sage de faire des travaux de fond (il semble que Delphi a des threads): Windows-Programmer.suite101.com/article.cfm/...
Il existe de multiples raisons pour utiliser PeekMessage Code> avant / au lieu de
getMessage code>: p>
peeekmessage code> avec le drapeau
pm_remove code> pour interroger la file d'attente et partir out
getMessage code> tout à fait. li>
pm_noremove CODE> et décider si vous souhaitez traiter et / ou supprimer le message de la file d'attente ou non. li>
iswindowunicode code> sur la poignée de la fenêtre renvoyée des messages et sélectionnez
Peekmessagea CODE> ou
PEEKMESSAGEW CODE>. li>