Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Att avsluta en tråd har följande resultat:
- Alla resurser som ägs av tråden, till exempel fönster och krokar, frigörs.
- Trådens slutkod har angetts.
- Trådobjektet signaleras.
- Om tråden är den enda aktiva tråden i processen avslutas processen. Mer information finns i Avsluta en process.
Funktionen GetExitCodeThread returnerar avslutningsstatusen för en tråd. När en tråd körs är dess avslutningsstatus STILL_ACTIVE. När en tråd avslutas ändras dess avslutningsstatus från STILL_ACTIVE till trådens slutkod.
När en tråd avslutas ändras trådobjektets tillstånd till signalerat, vilket frigör andra trådar som hade väntat på att tråden skulle avslutas. Mer information om synkronisering finns i Synkronisera körning av flera trådar.
När en tråd avslutas frigörs inte trådobjektet förrän alla öppna referenser till tråden stängs.
Så här avslutas trådar
En tråd körs tills någon av följande händelser inträffar:
- Tråden anropar funktionen ExitThread.
- Alla trådar i processen anropar funktionen ExitProcess.
- Trådfunktionen returnerar.
- Vilken tråd som helst anropar funktionen TerminateThread med ett handtag för tråden.
- Vilken som helst tråd anropar funktionen TerminateProcess med ett handtag till processen.
Slutkoden för en tråd är antingen det värde som anges i anropet till ExitThread, ExitProcess, TerminateThreadeller TerminateProcesseller värdet som returneras av trådfunktionen.
Om en tråd avslutas av ExitThreadanropar systemet startpunktsfunktionen för varje ansluten DLL med ett värde som anger att tråden kopplar från DLL:en (såvida du inte anropar funktionen DisableThreadLibraryCalls). Om en tråd avslutas av ExitProcess, anropas DLL-ingångspunktfunktionerna en gång för att indikera att processen kopplas från. DLL:er får ingen information när en tråd avslutas av TerminateThread eller en process avslutas av TerminateProcess. Mer information om DLL:er finns i Dynamic-Link Bibliotek.
Funktionerna TerminateThread och TerminateProcess bör endast användas under extrema omständigheter, eftersom de inte tillåter att trådar rensas, inte meddelar anslutna DLL:er och frigör inte den ursprungliga stacken. Dessutom stängs inte handtag till objekt som ägs av tråden förrän processen avslutas. Följande steg ger en bättre lösning:
- Skapa ett händelseobjekt med funktionen CreateEvent.
- Skapa trådarna.
- Varje tråd övervakar händelsetillståndet genom att anropa funktionen WaitForSingleObject. Använd ett tidsgränsintervall för väntetid på noll.
- Varje tråd avslutar sin körning när händelsen är inställd på det signalerade tillståndet (WaitForSingleObject returnerar WAIT_OBJECT_0).