Behandeling van een berichtrij

Een toepassing moet af en toe, om de inhoud van een thread's berichtenwachtrij van buiten de thread's bericht lus te bekijken. Bijvoorbeeld, als een toepassing venster procedure een langdurige bewerking tekening voert, kunt u de gebruiker om de werking te onderbreken te kunnen. Tenzij uw toepassing periodiek de berichtenwachtrij tijdens de bewerking voor muis en toetsenbord berichten onderzoekt, zal het niet reageren op gebruikersinvoer tot nadat de bewerking is voltooid. De reden hiervoor is dat de functie DispatchMessage in de thread's bericht lus geen retourneert totdat het venster procedure is verwerkt een bericht.

U kunt de functie PeekMessage te onderzoeken een berichtenwachtrij tijdens een langdurige bewerking. PeekMessage is vergelijkbaar met de functie GetMessage ; zowel een berichtenwachtrij voor een bericht dat overeenkomt met de filtercriteria controleren en kopieer het bericht naar een MSG -structuur. Het belangrijkste verschil tussen de twee functies is dat GetMessage geen retourneert totdat een bericht overeenkomen met de filtercriteria in de wachtrij is geplaatst terwijl PeekMessage onmiddellijk retourneert ongeacht of een bericht in de wachtrij.

In het volgende voorbeeld laat zien hoe met PeekMessage te onderzoeken een berichtenwachtrij voor klikken met de muis- en toetsenbordinvoer tijdens een langdurige bewerking.

HWND hwnd; 
BOOL fDone; 
MSG msg; 
 
/ / De werking begint en totdat deze is voltooid / / of totdat de gebruiker met de muis klikt of op een toets drukt. 
 
fDone = F&ALSE; 
terwijl (! fDone) {fDone = DoLengthyOperation(); / / toepassing gedefinieerde functie / / verwijderen van alle berichten die in de wachtrij kunnen worden. Als de / / wachtrij muis of toetsenbord bevat / / berichten, einde van de operatie. 
 
    terwijl (PeekMessage (amp; msg, hwnd, 0, 0, PM_REMOVE)) {switch(msg.message) {WM_LBUTTONDOWN geval: geval WM_RBUTTONDOWN: case WM_KEYDOWN: / / / / elke vereiste Schijfopruiming uitvoeren. 
                / / fDone = TRUE; 
        } 
    } 
} 
 

Andere functies, waaronder GetQueueStatus en GetInputState, ook kunnen u de inhoud van een thread's berichtenwachtrij. GetQueueStatus als resultaat een matrix van vlaggen die de soorten berichten in de wachtrij geeft; met behulp van het is de snelste manier om te ontdekken of de wachtrij geen berichten bevat. GetInputState geeft als resultaat waar als de wachtrij berichten van de muis of het toetsenbord bevat. Beide van deze functies kunnen worden gebruikt om te bepalen of de wachtrij bevat berichten die moeten worden verwerkt.

Index