Bạn không bao giờ nên gọi đình chỉ trên một TThread nó không an toàn để làm như vậy và sơ yếu lý lịch chỉ nên được sử dụng để bắt đầu một chuỗi đã được tạo.
Trong Delphi 2010, việc tạm ngưng và tiếp tục bị khấu hao và phương pháp bắt đầu được giới thiệu để củng cố điều này.
Để được giải thích đầy đủ hơn, hãy xem điều này thread tại diễn đàn Codegears.
đã nói rằng có 2 cách tôi sẽ chấm dứt và miễn phí một tthread.
1: Tôi đặt FreeOnTerminate khi chuỗi được tạo nên tôi chỉ cần gọi.
Thread.Terminate;
2: Giải phóng chuỗi một cách rõ ràng, vì tôi cần đọc kết quả từ tài sản công cộng trước khi chuỗi được giải phóng và sau khi kết thúc.
Thread.Terminate;
Thread.WaitFor;
//Do somthing like read a public property from thread object
if Thread <> nil then FreeAndNil(Thread);
Trong chính thực hiện vòng lặp nó có thể là một ý tưởng tốt để đặt một số xử lý ngoại lệ trong. Hoặc bạn có thể để lại thắc mắc tại sao các chủ đề dường như chấm dứt tự của nó. Điều này có thể gây ra AV nếu chuỗi được đặt thành FreeOnTerminate và nó đã được giải phóng khi bạn cố giải phóng nó.
procedure TThread.Execute;
begin
while not Terminated do
begin
try
//do something
except
on E:Exception do
//handle the exception
end;
end;
end;
thể trùng lặp của [Miễn phí một TThread tự động hoặc bằng tay] (http://stackoverflow.com/questions/3557105/free-a-tthread-either-automatically-or-manually) –
Đừng trì hoãn quyết chủ đề. Phương thức chấm dứt chỉ đặt thuộc tính Terminated thành true và phương thức Execute của bạn có trách nhiệm chấm dứt luồng. Nếu nó bị đình chỉ, nó sẽ không có cơ hội chấm dứt. – jachguate
Một vấn đề khác với mã ở trên, là nó có khả năng giải phóng luồng trước khi nó có thay đổi để chấm dứt cách thông thường. –