Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ukončení vlákna má následující výsledky:
- Všechny prostředky vlastněné vláknem, jako jsou okna a háčky, jsou uvolněny.
- Nastaví se ukončovací kód vlákna.
- Objekt vlákna je signalován.
- Pokud je vlákno jediným aktivním vláknem v procesu, proces se ukončí. Další informace naleznete v tématu Ukončení procesu.
Funkce GetExitCodeThread vrátí stav ukončení vlákna. Během provádění vlákna je jeho stav ukončení "STILL_ACTIVE". Když se vlákno ukončí, stav ukončení se změní z STILL_ACTIVE na ukončovací kód vlákna.
Když se vlákno ukončí, stav objektu vlákna se změní na signál a uvolní všechna ostatní vlákna, která čekala na ukončení vlákna. Další informace o synchronizaci naleznete v tématu Synchronizace provádění více vláken.
Když se vlákno ukončí, jeho objekt vlákna není uvolněn, dokud nebudou uzavřeny všechny otevřené popisovače vlákna.
Způsob ukončení vláken
Vlákno se spustí, dokud nedojde k jedné z následujících událostí:
- Vlákno volá funkci ExitThread.
- Jakékoli vlákno procesu volá funkci ExitProcess.
- Funkce vlákna se vrátí.
- Jakékoli vlákno volá funkci TerminateThread s handlem na vlákno.
- Jakékoli vlákno zavolá funkci TerminateProcess s popisovačem procesu.
Ukončovací kód vlákna je buď hodnota zadaná ve volání ExitThread, ExitProcess, TerminateThreadnebo TerminateProcess, nebo hodnotu vrácenou funkcí vlákna.
Pokud je vlákno ukončeno ExitThread, systém volá vstupní funkci každé připojené knihovny DLL s hodnotou označující, že vlákno je odpojeno od knihovny DLL (pokud nevoláte funkci DisableThreadLibraryCalls). Pokud je vlákno ukončeno ExitProcess, funkce vstupního bodu knihovny DLL jsou vyvolány jednou, aby informovaly o odpojení procesu. Knihovny DLL nejsou upozorněny, když je vlákno ukončeno pomocí TerminateThread nebo TerminateProcess. Další informace o knihovnách DLL naleznete v tématu Dynamic-Link knihovny.
Funkce TerminateThread a TerminateProcess by se měly používat pouze za extrémních okolností, protože neumožňují vyčištění vláken, neoznamujte připojené knihovny DLL a nevyvolávejte počáteční zásobník. Kromě toho zůstávají popisovače objektů vlastněných vláknem otevřené, dokud proces neskončí. Následující kroky poskytují lepší řešení:
- Vytvořte objekt události pomocí funkce CreateEvent.
- Vytvořte vlákna.
- Každé vlákno monitoruje stav události voláním WaitForSingleObject funkce. Použijte interval časového limitu čekání s hodnotou nula.
- Každé vlákno ukončí vlastní spuštění, když je událost nastavena na signalovaný stav (WaitForSingleObject vrátí WAIT_OBJECT_0).