Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een gebruikersinterfacethread wordt vaak gebruikt om gebruikersinvoer te verwerken en te reageren op gebruikersgebeurtenissen, onafhankelijk van threads die andere delen van de toepassing uitvoeren. De belangrijkste toepassingsthread (opgegeven in uw CWinApp-afgeleide klasse) is al voor u gemaakt en gestart. In dit onderwerp worden de stappen beschreven die nodig zijn om extra threads met de gebruikersinterface te maken.
Het eerste wat u moet doen bij het maken van een gebruikersinterfacethread, is het afleiden van een klasse uit CWinThread. U moet deze klasse declareren en implementeren met behulp van de DECLARE_DYNCREATE en IMPLEMENT_DYNCREATE macro's. Deze klasse moet bepaalde functies overschrijven en andere functies kunnen overschrijven. Deze functies en wat ze moeten doen, worden weergegeven in de volgende tabel.
Functies die moeten worden overschreven bij het maken van een User-Interface-thread
| Functie | Doel |
|---|---|
| ExitInstance | Het uitvoeren van opschoning wanneer de thread wordt beëindigd. Wordt meestal herschreven. |
| InitInstance | Voer de initialisatie van threadexemplaren uit. Moet worden overschreven. |
| OnIdle | Threadspecifieke wachttijdverwerking uitvoeren. Normaal gesproken niet overschreven. |
| PreTranslateMessage | Berichten filteren voordat ze worden verzonden naar TranslateMessage en DispatchMessage. Normaal gesproken niet overschreven. |
| ProcessWndProcException | Niet-verwerkte uitzonderingen onderscheppen die zijn gegenereerd door het bericht en de opdrachthandlers van de thread. Normaal gesproken niet overschreven. |
| Rennen | Controlefunctie voor de thread. Bevat de berichtpomp. Zelden overschreven. |
MFC biedt twee versies van AfxBeginThread door parameter overbelasting: een die alleen werkthreads kan maken en een die gebruikersinterface- of werkthreads kan maken. Als u uw gebruikersinterface-thread wilt starten, roept u de tweede overload van AfxBeginThread aan, met de volgende informatie:
De RUNTIME_CLASS van de klasse die u hebt afgeleid van
CWinThread.(Optioneel) Het gewenste prioriteitsniveau. De standaardwaarde is de normale prioriteit. Zie SetThreadPriority in de Windows SDK voor meer informatie over de beschikbare prioriteitsniveaus.
(Optioneel) De gewenste stackgrootte voor de thread. De standaardwaarde is dezelfde stackgrootte als de aanmakende thread.
(Optioneel) CREATE_SUSPENDED als u wilt dat de thread wordt gemaakt in een onderbroken status. De standaardwaarde is 0 of start de thread normaal.
(Optioneel) De gewenste beveiligingskenmerken. De standaardwaarde is dezelfde toegang als de bovenliggende thread. Zie SECURITY_ATTRIBUTES in de Windows SDK voor meer informatie over de indeling van deze beveiligingsgegevens.
AfxBeginThread doet het meeste werk voor u. Het maakt een nieuw object van uw klasse, initialiseert het met de informatie die u opgeeft en roept CWinThread::CreateThread aan om de thread uit te voeren. Tijdens de procedure worden controles uitgevoerd om ervoor te zorgen dat alle objecten correct worden vrijgegeven als een deel van het creëren mislukt.