Dela via


Multitrådning: Skapa MFC-User-Interface trådar

En användargränssnittstråd används ofta för att hantera användarindata och svara på användarhändelser oberoende av trådar som kör andra delar av programmet. Huvudprogramtråden (som finns i klassen CWinApp-derived) har redan skapats och startats åt dig. I det här avsnittet beskrivs de steg som krävs för att skapa ytterligare användargränssnittstrådar.

Det första du måste göra när du skapar en användargränssnittstråd är att härleda en klass från CWinThread. Du måste deklarera och implementera den här klassen med hjälp av makrona DECLARE_DYNCREATE och IMPLEMENT_DYNCREATE . Den här klassen måste åsidosätta vissa funktioner och kan åsidosätta andra. Dessa funktioner och vad de ska göra visas i följande tabell.

Funktioner att åsidosätta när du skapar en User-Interface tråd

Funktion Avsikt
ExitInstance Utför rensning när tråden avslutas. Vanligtvis åsidosatt.
InitInstance Utför initiering av trådinstans. Måste åsidosättas.
OnIdle Utför trådspecifik processering under inaktiv tid. Vanligtvis inte överskridit.
PreTranslateMessage Filtrera meddelanden innan de skickas till TranslateMessage och DispatchMessage. Vanligtvis inte överskridit.
ProcessWndProcException Fånga upp ohanterade undantag som genereras av trådens meddelande- och kommandohanterare. Vanligtvis inte överskridit.
Springa Styrfunktion för tråden. Innehåller meddelandepumpen. Sällan åsidosatt.

MFC tillhandahåller två versioner av AfxBeginThread genom parameteröverlagring: en som bara kan skapa arbetstrådar och en som kan skapa UI-trådar eller arbetstrådar. Starta användargränssnittstråden genom att anropa den andra överlagringen av AfxBeginThread med följande information:

  • RUNTIME_CLASS för klassen som du härledde från CWinThread.

  • (Valfritt) Önskad prioritetsnivå. Standardvärdet är normal prioritet. Mer information om tillgängliga prioritetsnivåer finns i SetThreadPriority i Windows SDK.

  • (Valfritt) Önskad stackstorlek för tråden. Standardvärdet är samma storleksstack som den skapande tråden.

  • (Valfritt) CREATE_SUSPENDED om du vill att tråden ska skapas i ett pausat tillstånd. Standardvärdet är 0 eller starta tråden normalt.

  • (Valfritt) Önskade säkerhetsattribut. Standardvärdet är samma åtkomst som den överordnade tråden. Mer information om formatet för den här säkerhetsinformationen finns i SECURITY_ATTRIBUTES i Windows SDK.

AfxBeginThread gör det mesta av arbetet åt dig. Det skapar ett nytt objekt i klassen, initierar det med den information du anger och anropar CWinThread::CreateThread för att börja köra tråden. Kontroller görs under hela proceduren för att se till att alla objekt frigörs korrekt ifall någon del av skapandet misslyckas.

Vad vill du veta mer om?

Se även

Multitrådning med C++ och MFC