Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

thread.terminate   Найти похожие ветки 

 
breeze   (2006-11-16 20:42) [0]

procedure TForm1.Button10Click(Sender: TObject);
begin
 if Thread1 = nil then
 begin
   button10.Caption := "Стоп";
   Thread1 := TScanThread.Create(False, edit4.Text, checkbox11.Checked);
 end
 else
 begin
   button10.Caption := "Старт";
   //Thread1.Terminate;
   TerminateThread(thread1.ThreadID,0);
   Thread1 := nil;
   end;

end;

поток инициализирован как nil
По нажатию на кнопку запускается поток
по повторному нажатию на кнопку по идее он дролжен завершиться, но этого не происходит.
Я походу туплю, но подскажите что неправильно делаю


 
breeze   (2006-11-16 20:59) [1]

h := OpenThread($1,false,Thread1.ThreadID);
     TerminateThread(h,0);
     CloseHandle(h);

изменил вот так, теперь поток останавливается, но не освобождает ресурсы которые использовал. Можно ли его уничтожить подчистую, чтоб от него вообще следа не осталось?


 
Джо ©   (2006-11-16 21:01) [2]

Не стоит использовать TerminateThread без очень БОЛЬШОЙ на то нужды. Об этом даже в MSDN написано недвусмысленно.


 
Джо ©   (2006-11-16 21:02) [3]

Используй Thread1.Terminate. Этот метод выставляет свойство Terminated в True. Его тебе и нужно анализировать в теле своего метода Execute и делать выход из него, кода Terminated = True. Вот и всё.
А, да. Поставь еще Thread1.FreeOnTerminate := True.


 
Eraser ©   (2006-11-16 21:03) [4]

> [0] breeze   (16.11.06 20:42)


> TerminateThread(thread1.ThreadID,0);

так потоки завершать очень не рекомендуется. поток должен завершиться сам, т.е.
Thread1.Terminate;
если нужно, чтобы операция выполнилась синхронно, можно добавить
Thread1.WaitFor;


 
Суслик ©   (2006-11-16 21:57) [5]


> Eraser ©   (16.11.06 21:03) [4]


> если нужно, чтобы операция выполнилась синхронно, можно
> добавить
> Thread1.WaitFor;

тут еще тонкий момент - а если у его потока стоит FreeOnTerminate?
AccessViolation может быть?

2Автор - у тебя каково значение свойства FreeOnTerminate у потока?



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.07 c
15-1163273225
Anatoly Podgoretsky
2006-11-11 22:27
2006.12.03
Ура, закончил - конечная версия APC


3-1159353030
Anto}{a
2006-09-27 14:30
2006.12.03
запись в ячейки EditDBEdit


6-1152600171
dwar
2006-07-11 10:42
2006.12.03
IndI ,IdHttp Connection reset by peer


2-1163785251
ProgRAMmer Dimonych
2006-11-17 20:40
2006.12.03
Опять торможу. Какая функция в Turbo Pascal отвечает...


2-1163595026
Новечек
2006-11-15 15:50
2006.12.03
Как подсчитать дробные числа?