בחינת תור הודעות

מדי פעם, ליישום דרושה לבחון את התוכן של תור הודעות של הליך משנה החל מחוץ לולאת הודעה של הליך המשנה. לדוגמה, אם הליך חלון של יישום מבצע פעולה הציור ארוכה, ייתכן שתרצה למשתמש תהיה אפשרות להפסיק את הפעולה. אלא אם היישום שלך מעת לעת בוחן תור ההודעות במהלך פעולת העכבר ולוח המקשים הודעות, לא יגיב למשתמש קלט עד לאחר השלמת הפעולה. הסיבה לכך היא הפונקציה DispatchMessage בלולאה הודעה של הליך המשנה אינו חוזר עד לסיום ההליך חלון עיבוד הודעה.

באפשרותך להשתמש בפונקציה PeekMessage כדי לבדוק תור הודעות במהלך פעולה מתמשכת. PeekMessage דומה לפונקציה GetMessage ; הן לבדוק תור הודעות עבור הודעה התואמת את הקריטריונים של המסנן ולאחר מכן העתק ההודעה למבנה MSG . ההבדל העיקרי בין שתי פונקציות הוא כי GetMessage אינו חוזר עד הודעה תואמים את הקריטריונים של המסנן מוצב בתור, בעוד PeekMessage מחזירה באופן מיידי ללא קשר של הודעה בתור.

הדוגמה הבאה מציגה כיצד להשתמש PeekMessage כדי לבדוק תור לחיצות עכבר, קלט מלוח המקשים במהלך פעולה מתמשכת.

HWND hwnd; 
BOOL fDone; 
MSG msg; 
 
/ / להתחיל את פעולת ולהמשיך עד להשלמת / / או עד שהמשתמש לוחץ על העכבר או מקיש על מקש. 
 
fDone = F&ALSE; 
בעוד (! fDone) {fDone = DoLengthyOperation(); / / המוגדר על-ידי היישום פונקציה / / הסרה של כל ההודעות אשר ייתכן בתור. אם / / התור מכיל כל עכבר או לוח מקשים / / הודעות, סיום הפעולה. 
 
    בזמן (PeekMessage (כח; msg, hwnd, 0, 0, PM_REMOVE)) {switch(msg.message) {מקרה WM_LBUTTONDOWN: מקרה WM_RBUTTONDOWN: מקרה WM_KEYDOWN: / / / / לבצע פעולות ניקוי הנדרש. 
                / / fDone = TRUE; 
        } 
    } 
} 

 

פונקציות אחרות, כולל GetQueueStatus GetInputState, גם מאפשרים לבחון את התוכן של תור הודעות של הליך משנה. GetQueueStatus מחזירה מערך של דגלים אשר מציינת את סוגי הודעות בתור; השימוש בו היא הדרך המהירה ביותר לגלות אם התור מכיל את כל ההודעות. GetInputState מחזירה TRUE אם התור מכיל הודעות העכבר או לוח המקשים. שתי פונקציות אלה ניתן להשתמש כדי לקבוע אם התור מכיל הודעות שיש לעבד.

Index