การตรวจสอบคิวข้อความ

บางครั้ง โปรแกรมประยุกต์ต้องการตรวจสอบเนื้อหาของคิวข้อความของเธรดจากภายนอกการวนรอบข้อความของเธรด ตัวอย่าง ถ้ากระบวนงานหน้าต่างของโปรแกรมประยุกต์ทำการดำเนินการวาดที่ยาวเกินไป คุณอาจต้องการให้ผู้ใช้สามารถขัดจังหวะการดำเนินการ จนกว่าโปรแกรมประยุกต์ของคุณตรวจสอบคิวข้อความเป็นระยะ ๆ ในระหว่างการดำเนินการสำหรับข้อความของเมาส์และคีย์บอร์ด มันจะไม่ตอบสนองต่อผู้ใช้ป้อนข้อมูลจนกว่าหลังจากที่การดำเนินการเสร็จเรียบร้อยแล้ว เหตุผลนี้คือ ว่า ฟังก์ชัน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