Dela via


Hantera tillståndsdata för MFC-moduler

I den här artikeln beskrivs tillståndsdata för MFC-moduler och hur det här tillståndet uppdateras när körningsflödet (sökvägskoden tar genom ett program när det körs) kommer in och lämnar en modul. Att växla modultillstånd med makrona AFX_MANAGE_STATE och METHOD_PROLOGUE diskuteras också.

Anmärkning

Termen "modul" refererar här till ett körbart program, eller till en DLL (eller uppsättning DLL:er) som fungerar oberoende av resten av programmet, men som använder en delad kopia av MFC DLL. En ActiveX-kontroll är ett typiskt exempel på en modul.

Som du ser i följande bild har MFC tillståndsdata för varje modul som används i ett program. Exempel på dessa data är handtag för Windows-instanser (som används för att ladda resurser), pekare till ett programs aktuella CWinApp- och CWinThread-objekt, referensantal för OLE-moduler och en mängd olika kartor som underhåller anslutningarna mellan Windows-objekthandtag och motsvarande instanser av MFC-objekt. Men när ett program använder flera moduler är tillståndsdata för varje modul inte programomfattande. I stället har varje modul en egen privat kopia av MFC:s tillståndsdata.

Diagram som visar tillståndsdata för en enskild modul.
Tillståndsdata för en enskild modul (program)

En moduls tillståndsdata finns i en struktur och är alltid tillgänglig via en pekare till den strukturen. När körningsflödet går in i en viss modul, som visas i bilden nedan, måste modulens tillstånd vara "aktuellt" eller "effektivt". Därför har varje trådobjekt en pekare till programmets effektiva tillståndsstruktur. Att hålla pekaren uppdaterad hela tiden är viktigt för att hantera programmets globala tillstånd och upprätthålla integriteten för varje moduls tillstånd. Felaktig hantering av det globala tillståndet kan leda till oförutsägbart programbeteende.

Tillståndsdata för flera moduler.
Tillståndsdata för flera moduler

Med andra ord ansvarar varje modul för korrekt växling mellan modultillstånd på alla startpunkter. En "startpunkt" är en plats där körningsflödet kan ange modulens kod. Startpunkter är:

Se även

Allmänna MFC-ämnen