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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
3-21439
PAVELsinicinV
2002-10-17 11:07
2002.11.07
Kакую размерность имеет символьное поле (Character (2))


4-21870
R0nin
2002-09-25 15:46
2002.11.07
Работа со шрифтами by WinAPI


4-21876
NeyroSpace
2002-09-25 16:05
2002.11.07
Как словить WM_WINDOWPOSCHANGING и кильнуть его. Без хука?


1-21638
Scholl
2002-10-23 11:13
2002.11.07
Пожалуйста помогите


1-21647
Anatoly P
2002-10-27 12:29
2002.11.07
TColor в String