TerminateThread nach _beginthreadex?

11/10/2008 - 12:34 von Daniel Kruge | Report spam
Hallo NG!

Wie kann ich einen Thread "von außen" beenden, den ich mit
_beginthreadex erstellt habe?

Ist der Rückgabewert der _beginthreadex -Funktion der Thread-Handle oder
ist der "thread identifier"

http://msdn.microsoft.com/en-us/library/kdzttdcb(VS.80).aspx

der Handle, den ich an TerminateThread übergebenn muss? Oder ist es
garnicht möglich, einen solchen Thread auf diese Weise zu beenden?

lg DK
 

Lesen sie die antworten

#1 René König
11/10/2008 - 13:53 | Warnen spam
Hallo!

Daniel Kruge schrieb:
Wie kann ich einen Thread "von außen" beenden, den ich mit
_beginthreadex erstellt habe?



Gar nicht, zum Beenden gibt es keine Funktion. Ich wüsste eben auch
nicht wie das gehen soll. Wenn der Thread jetzt zum Beispiel eine Datei
öffnet und Du den Thread von außen beendest, dann wird diese Datei für
die Laufzeit des Prozesses geöffnet bleiben. Das ist sicherlich in
Deinem Sinne.

Von daher musst Du dafür sorgen, dass der Thread einfach auslàuft. Zu
diesem Zwecke gibt es Events (CreateEvent). Du kannst dann von außen zum
Beenden das Event signalisieren (SetEvent). Wenn der Thread nun
regelmàßig den Status dieses Events prüft (WaitForSingleObject,
WaitForMultipleObjects) und dann den signalisierten Status erkennt,
làsst Du ihn einfach auslaufen.

Ist der Rückgabewert der _beginthreadex -Funktion der Thread-Handle oder
ist der "thread identifier"

http://msdn.microsoft.com/en-us/library/kdzttdcb(VS.80).aspx



Ich zitiere mal aus dem Link: "If successful, each of these functions
returns a *handle* to the newly created thread;"

Für den Identifier gibt es den letzten Parameter von _beginthreadex:
"Points to a 32-bit variable that receives the thread identifier. Might
be NULL, in which case it is not used."

der Handle, den ich an TerminateThread übergebenn muss? Oder ist es
garnicht möglich, einen solchen Thread auf diese Weise zu beenden?



Das, was Du von _beginthreadex bekommst, kannst Du an TerminateThread
übergeben. Allerdings beendet TerminateThread nicht den Thread, sondern
schießt ihn gnadenlos ab. Da es lediglich ein Abschießen ist, gibt es
keinerlei Freigaben, sogar der Thread-Stack bleibt Dir erhalten. Den
kannst Du zwar auch hàndisch freigeben, aber soweit solltest Du es gar
nicht erst kommen lassen...


Gruß,
René

Ähnliche fragen