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


Többszálas: MFC-User-Interface szálak létrehozása

A felhasználói felületi szálakat gyakran használják a felhasználói bemenetek kezelésére és a felhasználói eseményekre való reagálásra az alkalmazás más részeit végrehajtó szálaktól függetlenül. A fő alkalmazásszálat (amely a CWinApp-származtatott osztályban van megadva) már létrehoztuk és elindítottuk az Ön számára. Ez a témakör a további felhasználói felületi szálak létrehozásához szükséges lépéseket ismerteti.

A felhasználói felületi szál létrehozásakor először a CWinThread osztályát kell származtatnia. Ezt az osztályt deklarálnia és implementálnia kell a DECLARE_DYNCREATE és IMPLEMENT_DYNCREATE makrók használatával. Ennek az osztálynak felül kell írnia néhány függvényt, és felülírhat másokat. Ezeket a függvényeket és a teendőket az alábbi táblázatban mutatjuk be.

Felülbírálandó függvények User-Interface szál létrehozásakor

Funkció Cél
ExitInstance A szál leállásakor végezze el a törlést. Általában felülírják.
InitInstance Hajtsd végre a szálpéldány inicializálását. Felül kell bírálni.
OnIdle Szálspecifikus üresjárati feldolgozás végrehajtása. Általában nem írják felül.
PreTranslateMessage Szűrje meg az üzeneteket, mielőtt azokat a TranslateMessage és DispatchMessage címzettekhez továbbítja. Általában nem írják felül.
ProcessWndProcException A szál üzenet- és parancskezelői által okozott kezeletlen kivételek elfogása. Általában nem írják felül.
Fut A szál vezérlési függvénye. Tartalmazza az üzenet pumpát. Ritkán felülbírálva.

Az MFC a paraméterek túlterhelésével két verziót biztosít AfxBeginThread: az egyiket, amely csak munkaszálakat hozhat létre, a másik pedig felhasználói felületi szálakat vagy munkaszálakat hozhat létre. A felhasználói felületi szál elindításához hívja meg az AfxBeginThread második túlterhelését, és adja meg a következő információkat:

  • A származtatott osztály CWinThreadRUNTIME_CLASS.

  • (Nem kötelező) A kívánt prioritási szint. Az alapértelmezett érték a normál prioritás. Az elérhető prioritási szintekről további információt a Windows SDK SetThreadPriority szolgáltatásában talál.

  • (Nem kötelező) A szál kívánt veremmérete. Az alapértelmezett érték ugyanaz a méretverem, mint a létrehozási szál.

  • (Nem kötelező) CREATE_SUSPENDED, ha azt szeretné, hogy a szál felfüggesztett állapotban legyen létrehozva. Az alapértelmezett érték 0, vagy a szálat normál módon indítja el.

  • (Nem kötelező) A kívánt biztonsági attribútumok. Az alapértelmezett hozzáférés megegyezik a szülőszáléval. A biztonsági információk formátumáról további információt a Windows SDK SECURITY_ATTRIBUTES című témakörben talál.

AfxBeginThread elvégzi helyetted a munka nagy részét. Létrehoz egy új objektumot az osztályból, inicializálja a megadott információkkal, és meghívja a CWinThread::CreateThread parancsot a szál végrehajtásának megkezdéséhez. Az eljárás során ellenőrzik, hogy az összes objektum megfelelően van-e felszabadítva, ha a létrehozás bármely része sikertelen.

Miről szeretne többet tudni?

Lásd még

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