لماذا نظرة خاطفة قبل getMessage؟
-
27-09-2019 - |
سؤال
لماذا عبارة Peekmessage مطلوبة قبل GetMessage () لإنشاء قائمة انتظار الرسائل؟
المحلول
ليس مطلوبًا.
على الرغم من ذلك ، فإن ما تراه أحيانًا هو موضوع غير جاهز لمعالجة الرسائل حتى الآن ، لكنه يريد أن يكون قادرًا على استلامها في قائمة انتظار الرسائل الخاصة به. المواضيع الجديدة لا تحتوي على طوابير رسائل على الفور ، ولكن الاتصال PeekMessage
يكفي لإنشاء قائمة انتظار الرسائل. يعود على الفور نظرًا لعدم وجود رسالة ، وهذا يسمح للموضوع بالاستمرار في الاستعداد. في غضون ذلك ، يمكن أن تبدأ مؤشرات الترابط الأخرى رسائل في قائمة انتظار الخيط الجديد. بمجرد أن يصبح الخيط الجديد جاهزًا ، فإنه يتصل GetMessage
لاسترداد الرسالة الأولى من قائمة الانتظار ، أو الانتظار حتى يتم وضع رسالة على قائمة الانتظار.
نصائح أخرى
ليست كذلك. وظيفتان تفعل أشياء مختلفة.
Peekmessage (...) لا تنتظر ظهور رسالة - إنها تحصل على الأول إذا كانت هناك ، وإزالتها اختياريًا من قائمة الانتظار أيضًا ، ولكنها تعيد False فورًا لا توجد واحدة. إنه أكثر شيوعًا في التطبيقات التي تقوم بها بعض المعالجة أثناء انتظار الرسائل ، ولا يمكنك الجلوس هناك والانتظار إلى الأبد للرسالة التالية. ألعاب في الوقت الفعلي ومثل هذه بسهولة في هذه الفئة.
getMessage (...) ينتظر حتى هناك رسالة ، ويحصل عليها. إنه أكثر كفاءة في اتجاهين CPUWING ، لأنه لا يتم استقصاءه باستمرار ، لكنه سيتوقف مؤقتًا إذا لم تكن هناك أي رسائل. إنه أكثر شيوعًا في التطبيقات المصممة وغيرها من البرامج التي لا تتطلب معالجة مستمرة في الوقت الفعلي.
هناك أسباب متعددة لاستخدامها PeekMessage
قبل/بدلا من GetMessage
:
- التأكد من عدم تعليق البرنامج حتى وصول رسالة - هذا زائد بعض الشيء ، لأنه يمكنك استخدامه مباشرة
PeekMessage
مع الPM_REMOVE
العلم لاستطلاع قائمة انتظار الرسائل واتجهGetMessage
كليا. - باستخدام الوظيفة مع
PM_NOREMOVE
وتحديد ما إذا كنت تريد معالجة و/أو إزالة الرسالة من قائمة الانتظار ، أم لا. - الدعوة
IsWindowUnicode
على مقبض نافذة الرسائل التي تم إرجاعها واختيار أي منهماPeekMessageA
أوPeekMessageW
. - مضاعف ما سبق.