![]() |
Wie beendet man einen thread...
... den man mit beginthread gestartet hat? ich wollts so machen: ich erstelle also den thread. in der threadfuntion überprüf ich in allen schleifen, ob eine variable den wert stop hat, wenn sie das hat, rufe ich endthread auf und dachte dass sollte es dann sein. aber... pustekuchen! die threads laufen frölich weiter! Ich verwende wohlgemerkt NICHT das vcl thread object!
*MFG* |
Re: Wie beendet man einen thread...
|
Re: Wie beendet man einen thread...
ja, das hab ich hier auch rumligen, hier steht ja auch dass es rein theoretisch mit endthread gehen sollte.. tuts aber irgendwie nicht?! dauert dass solange, dass miene threads bis dahin sowieso fertig sind oder was???
|
Re: Wie beendet man einen thread...
Schau dir mal im PSDK TerminateThread an.
|
Re: Wie beendet man einen thread...
für terminatethread brauch ich das handle des threads. wie krieg ich das aus dem thread heraus heraus?
|
Re: Wie beendet man einen thread...
Das ist die Rückgabe von BeginThread ;)
|
Re: Wie beendet man einen thread...
äh moment mal: man nimmt na nicht die ThreadID, sondern das Handle?
*ganzunschuldigpfeiff* |
Re: Wie beendet man einen thread...
Nicht das Handle, sondern ein Handle ;). Jeder Thread hat eine eindeutige ID. Ein Handle stellt nun eine Art Zugriff auf diesen Thread dar. Es können belienig viele dieser Zugriffshandles angefordert werden (na ja, natürlich begrenzt durch die max. Anzahl Handles, die Windows verwalten kann), eines wird dir zur Verfügung gestellt, wenn du den Thread erstellst.
Grundsätzlich sollte man nur wissen, dass man jedes Handle, das man selbst angefordert hat, auch wieder schließen soll. |
Re: Wie beendet man einen thread...
Also ich erstell den thread ja mit
Handle := beginthread(...,ThreadId); zum beenden soll ich also den Handle-Wert nehmen, nicht die ThreadID? |
Re: Wie beendet man einen thread...
Ja. Kuck dir einfach mal im PSDK oder beim MSDN die Beschreibung von TerminateThread an.
Allerdings solltest du dir im klaren sein, dass du so Speicherlecks u. ä. verursachen kannst. EndThread, das ja auf ExitThread basiert, bittet den Thread, zu verschwinden, bietet ihm allerdings noch Zeit, sein Zueg zu packen, sprich Dateien und andere Handles zu schließen, Speicher freizugebenm etc. Deshalb ist der Thread sofort nach dem Beenden nicht unbedingt auch wirklich beendet. Mit TerminateThread setzt du dem Thread quasi eine Knarre an den Kopf und schmeißt ihn raus. Zeit zu packen hat er dann halt nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz