Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie beendet man einen thread... (https://www.delphipraxis.net/15742-wie-beendet-man-einen-thread.html)

Meflin 3. Feb 2004 15:58


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*

sakura 3. Feb 2004 15:59

Re: Wie beendet man einen thread...
 
Schau mal auf Luckies Homepage, da sollte ein nonVCL Thread Tutorial zu finden sein ;)

...:cat:...

Meflin 3. Feb 2004 16:02

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???

Chewie 3. Feb 2004 16:02

Re: Wie beendet man einen thread...
 
Schau dir mal im PSDK TerminateThread an.

Meflin 3. Feb 2004 16:03

Re: Wie beendet man einen thread...
 
für terminatethread brauch ich das handle des threads. wie krieg ich das aus dem thread heraus heraus?

Chewie 3. Feb 2004 16:14

Re: Wie beendet man einen thread...
 
Das ist die Rückgabe von BeginThread ;)

Meflin 3. Feb 2004 16:16

Re: Wie beendet man einen thread...
 
äh moment mal: man nimmt na nicht die ThreadID, sondern das Handle?
*ganzunschuldigpfeiff*

Chewie 3. Feb 2004 16:19

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.

Meflin 3. Feb 2004 16:22

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?

Chewie 3. Feb 2004 16:33

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 06:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz