@Schokohase
Welchen Teil hast du nicht verstanden?
In der Hilfe steht:
Zitat:
Die vorzeitige Beendigung eines Threads kann mit der Methode Terminate ausgelöst werden.
Was hier geschied:
Delphi-Quellcode:
procedure TCustomThread.Extract;
var
iRead : Int64;
begin
if FIsOpen then
begin
...
if (StreamSize = ReadSize) or FCancel then
Terminate;
end;
end;
Weiterhin heißt es in der Hilfe:
Zitat:
Anmerkung: Im Gegensatz zur Windows-
API-Funktion Terminate, die den Thread sofort abbricht, fordert die Methode Terminate nur an, dass der Thread beendet wird. So kann der Thread vor Beendigung noch sämtliche
Bereingungen durchführen.
Und dazu gehört auch, dass der Stream geschlossen und alle anderen Bereiche/Variablen freigegeben werden.
Da man Terminate nicht überschreiben kann, lohnt ein Blick in die System.Classes und sieht das Terminate die virtuelle
Procedure TerminatedSet aufruft, die selbst aber nichts macht.
Delphi-Quellcode:
procedure TThread.Terminate;
begin
if FExternalThread then
raise EThread.CreateRes(@SThreadExternalTerminate);
FTerminated := True;
TerminatedSet;
end;
procedure TThread.TerminatedSet;
begin
end;
Ist damit deine Frage beantwortet?
Zurück zum Thema bzw. meiner Frage.
Wenn, wie o.a. Terminate zur Beendigung aufgerufen werden kann, warum wird Terminate innerhalb von Destroy nochmals
aufgerufen?