Ich habe einen Code in Delphi, die folgende tut:Wenn Sie einen Thread (Klasse TThread) beenden(), beendet es jedes Kind dieses Threads?
procedure THilo.Execute; // (which is the thread)
begin
inherited;
FreeOnTerminate := True;
while not Terminated do
begin
(...)
Sleep(100);
end;
end;
und woanders jetzt, in einem anderen Thread (oder die GUI) wir dies tun:
var
Hilo2: THilo;
begin
Hilo2 := THilo.Create(True);
Hilo2.start;
Hilo2 := THilo.Create(True);
Hilo2.start;
end;
jetzt haben wir 2 mal ausgeführt der gleiche Thread, und sie laufen parallel. Was passiert, wenn wir das jetzt tun ?:
Hilo2.Terminate;
wird dies beendet beide Threads oder nur 1, oder was? auch, wenn wir es beenden möchten, könnten wir dies durch .Resume() erreichen?
Vielen Dank im Voraus
Dank J, hatte ich in meinem Programm dies und konnte die Threads nicht beenden, so würde es nur mit einem Array eines TThread behoben werden, oder? wie 'Hilo [i]: = THilo.Create (True); Hilo [i] .start; ' – user2308704
Oh - ein weiterer erfahrener Delphi Multithread-Entwickler. Das macht mindestens zwei von uns :) –
Auch, da 'FreeOnTerminate = True' verwendet wird, wenn der Thread vorzeitig beendet wird (nicht abgefangene Exception, etc), kann der Aufruf von' Terminate() 'fehlschlagen (oder schlimmer, der Speicher wird beschädigt) wenn der Thread schon weg ist. 'FreeOnTerminate = True' sollte nur für Create-and-Forget-Threads verwendet werden. Sobald Sie einen Thread für ** irgendeinen ** Grund extern berühren müssen (aussetzen/fortsetzen, beenden/warten, Aktualisierungen/Zugriffe auf Mitglieder, etc.), verwenden Sie nicht 'FreeOnTerminate = True'! –