Megosztás a következőn keresztül:


Többszálúság C++ és MFC használatával

A Microsoft Foundation Class (MFC) kódtár támogatja a többszálú alkalmazásokat. Ez a témakör a folyamatokat és a szálakat, valamint a többszálúság MFC-megközelítését ismerteti.

A folyamat egy alkalmazás végrehajtó példánya. Ha például duplán a Jegyzettömb ikonra kattint, elindít egy folyamatot, amely a Jegyzettömbet futtatja.

A szál egy folyamaton belüli végrehajtási útvonal. A Jegyzettömb indításakor az operációs rendszer létrehoz egy folyamatot, és megkezdi a folyamat elsődleges szálának végrehajtását. Amikor ez a szál leáll, a folyamat is. Ezt az elsődleges szálat az indítási kód adja meg az operációs rendszernek függvénycím formájában. Általában a main vagy a WinMain függvény címe van megadva.

Igény szerint további szálakat is létrehozhat az alkalmazásban. Érdemes lehet a háttér- vagy karbantartási feladatokat kezelni, ha nem szeretné, hogy a felhasználó megvárja a befejezésüket. Az MFC-alkalmazások összes szálát CWinThread-objektumok képviselik. A legtöbb esetben nem is kell explicit módon létrehoznia ezeket az objektumokat; ehelyett hívja meg az AfxBeginThread keretrendszer-segédfüggvényt, amely létrehozza az CWinThread objektumot.

Az MFC két száltípust különböztet meg: a felhasználói felületi szálakat és a feldolgozói szálakat. A felhasználói felületi szálakat gyakran használják a felhasználói bemenetek kezelésére, valamint a felhasználó által létrehozott eseményekre és üzenetekre való válaszadásra. A munkavégző szálakat gyakran használják olyan feladatok elvégzésére, mint például az újraszámítás, amelyek nem igényelnek felhasználói bemenetet. A Win32 API nem tesz különbséget a szálak típusai között; csak ismernie kell a szál kezdőcímét, hogy megkezdhesse a szál végrehajtását. Az MFC a felhasználói felületi szálakat úgy kezeli, hogy egy üzenetszivattyút biztosít a felhasználói felületen lévő eseményekhez. CWinApp egy példa egy felhasználói felületi szálobjektumra, mert a felhasználó által létrehozott eseményekből és üzenetekből CWinThread származik és kezeli azt.

Különös figyelmet kell fordítani az olyan helyzetekre, amikor egynél több szál is hozzáférést igényelhet ugyanahhoz az objektumhoz. Többszálú: A programozási tippek olyan technikákat írnak le, amelyekkel megkerülheti az ilyen helyzetekben felmerülő problémákat. Többszálas: A szinkronizálási osztályok használata azt ismerteti, hogyan használhatja azokat az osztályokat, amelyek több szálról egyetlen objektumra szinkronizálják a hozzáférést.

A többszálas programozás írása és hibakeresése eredendően bonyolult és trükkös vállalkozás, mivel gondoskodnia kell arról, hogy az objektumokhoz egyszerre több szál ne férhessen hozzá. A többszálú témakörök nem tanítják meg a többszálú programozás alapjait, csak az MFC használatát a többszálú programban. A Visual C++-ban található többszálú MFC-minták néhány többszálú bővítményfunkciót és Win32 API-kat szemléltetnek, amelyeket az MFC nem foglal magában; azonban csak kiindulópontként szolgálnak.

További információ arról, hogy az operációs rendszer hogyan kezeli a folyamatokat és a szálakat: Folyamatok és szálak a Windows SDK-ban.

Az MFC többszálú támogatásával kapcsolatos további információkért tekintse meg az alábbi témaköröket:

Lásd még

A régebbi kód többszálú támogatása (Visual C++)