Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A szál megszakítása a következő eredményekkel jár:
- A szál által birtokolt erőforrások, például az ablakok és a horgok felszabadulnak.
- A szál kilépési kódja be van állítva.
- A szálobjektum jelzést ad.
- Ha a folyamat egyetlen aktív szála a szál, a folyamat leáll. További információ: Folyamat leállítása.
A GetExitCodeThread függvény visszaadja egy szál megszakítási állapotát. Miközben egy szál végrehajtás alatt van, a megszakítási állapota STILL_ACTIVE. Amikor egy szál leáll, a leállítás állapota STILL_ACTIVE-ről a szál kilépési kódjára változik.
Amikor egy szál leáll, a szál objektumának állapota jelzettre változik, felszabadítva minden olyan másik szálat, amely a szál leállítására várt. További információ a szinkronizálásról: Több szál végrehajtásának szinkronizálása.
Amikor egy szál leáll, a szálobjektum nem szabadul fel, amíg a szál összes nyitott fogópontját be nem zárják.
A szálak leállítása
Egy szál addig fut, amíg az alábbi események valamelyike nem következik be:
- A szál meghívja a ExitThread függvényt.
- A folyamat bármely szála meghívja az ExitProcess függvényt.
- A szálfüggvény visszatér.
- Minden szál meghívja a TerminateThread függvényt egy fogóponttal a szálhoz.
- Minden szál meghívja a TerminateProcess függvényt a folyamathoz tartozó leíróval.
A szál kilépési kódja vagy az ExitThread , ExitProcess, TerminateThreadvagy TerminateProcesshívásban megadott érték, vagy a szálfüggvény által visszaadott érték.
Ha ExitThreadmegszakít egy szálat, a rendszer meghívja az egyes csatolt DLL-ek belépési pontfüggvényét egy olyan értékkel, amely azt jelzi, hogy a szál le van választva a DLL-ről (hacsak nem hívja meg a DisableThreadLibraryCalls függvényt). Ha egy szálat a ExitProcessbefejez, a DLL belépési pont függvényei egyszer kerülnek meghívásra, jelezve, hogy a folyamat leválasztásra kerül. A DLL-ek nem kapnak értesítést, ha egy szálat TerminateThread vagy TerminateProcessszakít meg. További információ a DLL-ekről: Dynamic-Link Kódtárak.
A TerminateThread és TerminateProcess függvényeket csak szélsőséges körülmények között szabad használni, mivel nem teszik lehetővé a szálak törlését, nem értesítik a csatolt DLL-eket, és nem szabadítják fel a kezdeti vermet. Emellett a szál tulajdonában lévő objektumok kezelői mindaddig nem lesznek lezárva, amíg a folyamat be nem fejeződik. Az alábbi lépések jobb megoldást nyújtanak:
- Eseményobjektum létrehozása a CreateEvent függvénnyel.
- Hozza létre a szálakat.
- Minden szál a WaitForSingleObject függvény meghívásával figyeli az esemény állapotát. Használjon nulla várakozási időtúllépési időközt.
- Minden szál leállítja a saját végrehajtását, amikor az esemény a jelzett állapotra van állítva (WaitForSingleObject WAIT_OBJECT_0 ad vissza).