Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.187 c
15-1163163560
koha
2006-11-10 15:59
2006.12.03
Модератору !!!


4-1153033422
apic
2006-07-16 11:03
2006.12.03
работа с железом


2-1163243363
lsvit
2006-11-11 14:09
2006.12.03
TList


15-1163075530
!g
2006-11-09 15:32
2006.12.03
Microsoft Visual Studio 2005


15-1163714546
Юрий Зотов
2006-11-17 01:02
2006.12.03
И я тоже не хочу никого обидеть!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский