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

Вниз

Как правильно завершить поток и...   Найти похожие ветки 

 
Andrew Klochko   (2002-10-29 23:49) [0]

Как правильно завершить поток и освободить занимаемую им память - в примере, описанном ниже, если код MyThrd.Terminate; MyThrd.Free; после выхода из потока вешает компьютер. При отработке кода до конца (без принудительного останова) никаких проблем не возникает.

Пример:
Procedure TMyThread.Execute;
Begin
…………….
Recurs(….);
……………
End;

Procedure TMyThread.Recurs(…..);
Begin
…………….
Recurs(….);
……………
End;


 
Юрий Зотов   (2002-10-30 00:11) [1]

Procedure TMyThread.Recurs(…..);
Begin
…………….
if not Terminated then Recurs(….);
……………
End;

И, вероятно, будет лучше вместо явного MyThrd.Free использовать FreeOnTerminate. Тогда объект уничтожится сам собой, достаточно будет просто сказать MyThrd.Terminate - и все.


 
Andrew Klochko   (2002-10-30 00:33) [2]

Но!
Procedure TMyThread.Recurs(…..);
Begin
…………….
If Terminated then ExitThread(XXX);
Recurs(….);
……………
End;

Условие не выполняется!!!, т.е. при MyThrd.Terminate выход из потока происходит в каком-то другом месте, т.е. код выхода не равен ХХХ


 
Andrew Klochko   (2002-10-30 01:11) [3]

Ну почему замолчали ????


 
SottNick   (2002-10-30 07:16) [4]

if MyThrd<>nil
then
begin
MyThrd.Suspend;
MyThrd.Free;
MyThrd:=nil;
end;

должно помочь
при принудительном завершении потока память почему-то не освобождается
ЕСЛИ РЕШИШЬ ПРОБЛЕМУ, НАПИШИ



 
Юрий Зотов   (2002-10-30 08:54) [5]

Андрей, не стоит смешивать в одну кучу потоки Windows и дельфишный объект TThread, это не совсем одно и то же. Если уж Вы пользуетесь TThread"ом, то не следует напрямую вызывать ExitThread. Для завершения потока используйте его свойства и методы, а ExitThread он сам вызовет (тогда, когда ему это будет нужно, там не все так просто - и именно по этой причине не нужно вызывать ExitThread напрямую). А для передачи кода завершения можно использовать ReturnValue.



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

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

Наверх





Память: 0.46 MB
Время: 0.008 c
1-21488
Пасечник
2002-10-28 17:54
2002.11.07
Перерисовка формы


14-21788
Undert
2002-10-19 13:36
2002.11.07
Какие цвета ...


3-21459
Elvira
2002-10-21 14:53
2002.11.07
LookUp-поля


6-21706
Mr.Kirya
2002-09-06 13:59
2002.11.07
Пересылка файла через DXPlay


3-21366
Ренат
2002-10-17 12:16
2002.11.07
Две базы в одном запросе





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