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

Вниз

Вопрос про TThread   Найти похожие ветки 

 
Демонов Е.В.   (2002-10-07 13:43) [0]

Такой вопрос.

Есть поток:

procedure TMyThread.Execute;
begin
FreeOnTerminate := True;
...........//Выполняется код испльзуя свойство Terminated;
end;


Соэдаю этото поток s:=TMyThread.Create;
Он Выполняется

И иногда его надо остановить

s.Terminate;
s.WaitFor
.....//Чегото делаю;

Так вот при выплонении s.WaitFor вылазит ошибка - Неверный дескриптор (код 6)

А если убрать из Exeсute строку FreeOnTerminate := True; то тогда всё нормально.

В чём дело ? Раскажите что я делаю не так.
Спасибо..


 
Reindeer Moss Eater   (2002-10-07 13:46) [1]

К моменту вызова
s.WaitFor
дескриптор нити уже освобожден


 
Демонов Е.В.   (2002-10-07 13:55) [2]

Reindeer Moss Eater
>>К моменту вызова
>>s.WaitFor
>>дескриптор нити уже освобожден

ну это я понял. А как в этом случае быть. Те надо убирать FreeOnTerminate := True и делать так
s.Terminate;
s.WaitFor
s.destroy
??????????




 
Кот Бегемот   (2002-10-07 13:55) [3]

Идеологически неправильно

Используй Suspend / Resume


 
Reindeer Moss Eater   (2002-10-07 14:01) [4]

ну это я понял. А как в этом случае быть.
Не надо ждать того, чего уже нет.


 
Петя   (2002-10-07 14:33) [5]

>>Не надо ждать того, чего уже нет.
Ну так и уж не.
Например

procedure TMyThread.Execute;
begin
FreeOnTerminate := True;
while not terminated do
.....что то
end;

И предположим что это чтото делается 2 секунды // ну так надо.
В главном потоке
я делаю

s.Terminate;
s.WaitFor; // здесь я должен убедится что s закончила работу
И ЧЕГОТО ДеЛаю.

Как тогда...
Или ... вот что я подумал .. если ккой то код будет выполнятся аж 2 сек. в потоке s то тогда строка s.WaitFor начнёт выполнится ещё до окончания этого двухсекундного кода.
Ну поправте меня если я не прав.



 
Reindeer Moss Eater   (2002-10-07 14:42) [6]

FreeOnTerminte := True удобно для потоков реализованных по принципу "Запустила и забыла".
Если надо ждать завершения, то лучше дескрипторы освобождать самому


 
Петя   (2002-10-07 14:46) [7]

>>Reindeer Moss Eater
Вот это я хотел услышать.


 
Nomad.kz   (2002-10-07 15:01) [8]

Из примера хэлповского TProgressBar, TThread example (pg1.pas):

procedure TForm1.FormDestroy(Sender: TObject); // Terminate any threads still running

begin
if (MyThread1 <> nil) and (Thread1Active = true) then
begin
MyThread1.Terminate;
MyThread1.WaitFor; // wait for it to terminate
end;
if (MyThread2 <> nil) and (Thread2Active = true) then
begin
MyThread2.Terminate;
MyThread2.WaitFor;
end;
end;



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

Форум: "Основная";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
7-56368
ByteButcher
2002-08-08 17:29
2002.10.17
Как реализацовать CreateRemoteThread для Win9x?


1-56050
Gaber
2002-10-08 13:11
2002.10.17
Возможно ли в одном Label1.Caption ввести текс в 2 строки


1-56152
Лана Розанова
2002-10-07 10:11
2002.10.17
HTML


3-55939
delfist
2002-09-24 14:09
2002.10.17
А можно ли сразу получить сумму по колонке цифр в таблице?


1-56080
alxx
2002-10-08 12:48
2002.10.17
Inplace activation





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский