Я использую потоки в своем проекте. И я хочу немедленно убить и завершить поток.
пример:
type
test = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
var
Form1: TForm1;
a:tthread;
implementation
{$R *.dfm}
procedure test.Execute;
begin
Synchronize(procedure begin
form1.ProgressBar1.position := 0;
sleep(5000);
form1.ProgressBar1.position := 100;
end
);
end;
procedure TForm1.btn_startClick(Sender: TObject);
begin
a:=test.Create(false);
end;
procedure TForm1.btn_stopClick(Sender: TObject);
begin
terminatethread(a.ThreadID,1); //Force Terminate
end;
Но когда я нажимаю на btn_stop
(после нажатия на btn_start
), поток не останавливается. Итак, как можно немедленно остановить этот поток?
Кстати, a.terminate;
тоже не сработало.
Спасибо.
ThreadID
иHandle
. ФункцияTerminateThread
ожидает потокHandle
, а неThreadID
. - person TLama   schedule 14.08.2013sleep
... И о вашем редактировании: Так как я могу его закрыть? И как я могу найтиthread handle
? - person Sky   schedule 14.08.2013TerminateThread(a.Handle, 1);
. Вы проходили тамThreadID
, что отличается отHandle
. Но обратите внимание, что это неправильный способ завершения потоков. - person TLama   schedule 14.08.2013