Bir ileti sırası incelenmesi

Bazen, bir uygulama bir iş parçacığının ileti sırasından parçacığının ileti döngüsü dışında içeriğini incelemek gerekiyor. Örneğin, uygulama penceresinin yordam uzun bir çizim işlemi gerçekleştirir, kesme işlemi yapabilmek için kullanıcı isteyebilirsiniz. Uygulamanızın düzenli olarak fare ve klavye iletilerini işlemi sırasında ileti sırası inceliyor sürece, kullanıcıya kadar işlemi tamamlandıktan sonra giriş yanıtlamaz. Bunun nedeni ileti işleme pencere yordamı bitene kadar iş parçacığının ileti döngüsü DispatchMessage işlev dönmez ise.

Uzun bir işlem sırasında bir ileti sırası incelemek için PeekMessage işlevini kullanabilirsiniz. PeekMessage GetMessage işlevine benzer; hem süzgeç ölçütüyle eşleşen bir iletinin ileti sırası denetleyin ve iletiyi bir msg yapısına kopyalayın. Süzgeç ölçütüyle eşleşen bir ileti sırasına yerleştirilir kadar ise PeekMessage hemen ileti sırada olmasına bakılmaksızın döner GetMessage döndürmez ki iki işlev arasındaki temel fark ise.

Aşağıdaki örnek PeekMessage bir ileti sırası fare tıklamaları ve klavye girişi için uzun bir işlem sırasında incelemek için nasıl kullanılacağını gösterir.

Hwnd hwnd; 
bool fDone; 
msg msg; 
 
/ / İşlem b&aşlar ve tamamlanıncaya kadar devam / / kullanıcı fare tıklatmaları veya bir tuşa bastığında kadar. 
 
fDone = false; 
süre (! fDone) {fDone = DoLengthyOperation(); / / uygulama tanımlı işlev / / sırada olabilir iletileri Kaldır. Eğer / / sıra içeren herhangi bir fare ya da klavye / / işlem iletileri, end. 
 
    süre (PeekMessage (amp; msg, hwnd, 0, 0, pm_remove)) {switch(msg.message) {wm_lbuttondown durumda: wm_rbuttondown durumda: wm_keydown durumda: / / / / tüm gerekli temizleme işlemi gerçekleştirin. 
                / / fDone = true; 
        } 
    } 
} 

 

GetQueueStatus ve GetInputState, gibi diğer işlevler de bir iş parçacığının ileti sırasının içeriğini incelemek izin. GetQueueStatus sıradaki iletilerin türünü belirten bayraklar dizisi döndürür; Bunu kullanarak, sıradaki tüm iletileri içerip içermediğini keşfetmek için en hızlı yoludur. GetInputState , sıra fare ya da klavye mesajlar içeriyorsa true döner. Her ikisi de bu fonksiyonların sıra işlenmesi gereken iletileri içerip içermediğini belirlemek için kullanılabilir.

Index