سؤال

لماذا عبارة Peekmessage مطلوبة قبل GetMessage () لإنشاء قائمة انتظار الرسائل؟

هل كانت مفيدة؟

المحلول

ليس مطلوبًا.

على الرغم من ذلك ، فإن ما تراه أحيانًا هو موضوع غير جاهز لمعالجة الرسائل حتى الآن ، لكنه يريد أن يكون قادرًا على استلامها في قائمة انتظار الرسائل الخاصة به. المواضيع الجديدة لا تحتوي على طوابير رسائل على الفور ، ولكن الاتصال PeekMessage يكفي لإنشاء قائمة انتظار الرسائل. يعود على الفور نظرًا لعدم وجود رسالة ، وهذا يسمح للموضوع بالاستمرار في الاستعداد. في غضون ذلك ، يمكن أن تبدأ مؤشرات الترابط الأخرى رسائل في قائمة انتظار الخيط الجديد. بمجرد أن يصبح الخيط الجديد جاهزًا ، فإنه يتصل GetMessage لاسترداد الرسالة الأولى من قائمة الانتظار ، أو الانتظار حتى يتم وضع رسالة على قائمة الانتظار.

نصائح أخرى

ليست كذلك. وظيفتان تفعل أشياء مختلفة.

Peekmessage (...) لا تنتظر ظهور رسالة - إنها تحصل على الأول إذا كانت هناك ، وإزالتها اختياريًا من قائمة الانتظار أيضًا ، ولكنها تعيد False فورًا لا توجد واحدة. إنه أكثر شيوعًا في التطبيقات التي تقوم بها بعض المعالجة أثناء انتظار الرسائل ، ولا يمكنك الجلوس هناك والانتظار إلى الأبد للرسالة التالية. ألعاب في الوقت الفعلي ومثل هذه بسهولة في هذه الفئة.

getMessage (...) ينتظر حتى هناك رسالة ، ويحصل عليها. إنه أكثر كفاءة في اتجاهين CPUWING ، لأنه لا يتم استقصاءه باستمرار ، لكنه سيتوقف مؤقتًا إذا لم تكن هناك أي رسائل. إنه أكثر شيوعًا في التطبيقات المصممة وغيرها من البرامج التي لا تتطلب معالجة مستمرة في الوقت الفعلي.

هناك أسباب متعددة لاستخدامها PeekMessage قبل/بدلا من GetMessage:

  1. التأكد من عدم تعليق البرنامج حتى وصول رسالة - هذا زائد بعض الشيء ، لأنه يمكنك استخدامه مباشرة PeekMessage مع ال PM_REMOVE العلم لاستطلاع قائمة انتظار الرسائل واتجه GetMessage كليا.
  2. باستخدام الوظيفة مع PM_NOREMOVE وتحديد ما إذا كنت تريد معالجة و/أو إزالة الرسالة من قائمة الانتظار ، أم لا.
  3. الدعوة IsWindowUnicode على مقبض نافذة الرسائل التي تم إرجاعها واختيار أي منهما PeekMessageA أو PeekMessageW.
  4. مضاعف ما سبق.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top